2012-09-19 68 views
1

我有一个变量,textvar内容填充SAS变量,看起来像这样:基础上的另一个变量

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

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; 
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; 
+0

谢谢,但在我的真实数据中,变量的顺序可能会改变,所以我无法对其进行硬编码。 – itzy