Variables 来自其他变量的SAS动态变量名
我试图根据其他变量中包含的数据创建SAS变量名。例如,我可以从Variables 来自其他变量的SAS动态变量名,variables,sas,names,Variables,Sas,Names,我试图根据其他变量中包含的数据创建SAS变量名。例如,我可以从 Obs Var1 Var2 1 abc X 2 def X 3 ghi Y 4 jkl X 我想以 Obs Var1 Var2 X Y 1 abc X abc 2 def X def 3 ghi Y ghi 4 jkl X jkl 我确实有
Obs Var1 Var2
1 abc X
2 def X
3 ghi Y
4 jkl X
我想以
Obs Var1 Var2 X Y
1 abc X abc
2 def X def
3 ghi Y ghi
4 jkl X jkl
我确实有一种方法可以做到这一点,但它需要一些难看的宏来首先创建所需的变量(使用length语句),然后创建一系列编号的宏变量(每个观察值1个),这些变量随后在数据步循环中调用。它可以工作,但很复杂,我认为它不能很好地扩展到实际数据,因为实际数据包含多个用于创建每行和几千行的变量
我也尝试过使用数组——在宏变量中保存变量名称,使用它生成数组语句,并尝试跟踪每个新变量需要哪个数组索引,但这也很复杂
真正有帮助的是类似于
vvaluex(var2)=var1
除了vvaluex不能在equals的左边。有什么想法或想法吗?PROC TRANSPOSE是做问题示例的一种简便方法
data have;
input Obs Var1 $ Var2 $;
datalines;
1 abc X
2 def X
3 ghi Y
4 jkl X
;;;;
run;
proc transpose data=have out=want;
by obs;
id var2;
var var1;
copy var1 var2;
run;
另一个选项可能与您以前尝试过的类似,使用数组和VNAME:
proc sql;
select var2 into :var2list separated by ' ' from have;
quit;
data want;
set have;
array newvars $ &var2list;
do _t = 1 to dim(newvars);
if vname(newvars[_t]) = Var2 then do;
newvars[_t] = var1;
leave;
end;
end;
run;
PROC转置应该更快,也可能更灵活,但在某些情况下,这可能会更好