我有一个变量,textvar
,看起来像这样:
type=1&name=bob
type=2&name=sue
我想创建一个如下所示的新表:
type name
1 bob
2 sue
我的方法是使用scan
来拆分&
上的变量,因此对于我的第一个观察结果
var1 var2
type=1 name=bob
所以现在我可以再次使用扫描来拆分=
:
vname = scan(var1, 1, '=');
value = scan(var1, 2, '=');
但是我现在如何将value
分配给名为 vname
的变量?
PROC TRANPSOSE 是最快的方法。 你需要一个 ID 变量(虚拟或真实)。
data test;
informat testvar $50.;
input testvar $;
datalines;
type=1&name=bob
type=2&name=sue
;;;;
run;
data test_vert;
set test;
id+1;
length scanner $20 vname vvalue $20;
scanner=scan(testvar,1,"&");
do _t=2 by 1 until (scanner=' ');
vname=scan(scanner,1,"=");
vvalue=scan(scanner,2,"=");
output;
scanner=scan(testvar,_t,"&");
end;
run;
proc transpose data=test_vert out=test_T;
by id;
id vname;
var vvalue;
run;
这有帮助吗?SAS 中的动态变量名称
我想我有一些代码来解决这个问题,但把它留在了我的工作场所。
显然,
您还没有包含真实数据,但是如果每行原始数据的格式相同,您不能对某些值进行硬编码吗? 我的代码将"="和"&"转换为","以使扫描功能更易于使用。
data want (keep=type name);
set test;
_newvar=translate(testvar,",,","&=");
type=input(scan(_newvar,2),best12.);
length name $20;
name=scan(_newvar,4);
run;