1

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

4

3 回答 3

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;
于 2012-09-19T14:28:55.063 回答
0

这有帮助吗?SAS 中的动态变量名

我想我有一些代码可以解决这个问题,但把它留在了我的工作场所。

于 2012-09-19T14:04:47.457 回答
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;
于 2012-09-19T16:08:22.200 回答