根据另一个变量的内容填充SAS变量

时间:2012-09-19 13:56:47

标签: sas

我有一个变量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的变量?

3 个答案:

答案 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;
相关问题