我有一个变量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
的变量?
答案 0 :(得分:3)
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;
答案 1 :(得分:0)
这有帮助吗? Dynamic variable names in SAS
我想我有一些代码可以解决这个问题,但是把它放在我的工作场所。
答案 2 :(得分:0)
显然你还没有包含你的真实数据,但如果原始数据的格式在每一行中都相同,你不能只硬编码一些值吗?我的代码转换为“=”和“&” “,”使扫描功能更容易使用。
data want (keep=type name);
set test;
_newvar=translate(testvar,",,","&=");
type=input(scan(_newvar,2),best12.);
length name $20;
name=scan(_newvar,4);
run;