Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 来自其他变量的SAS动态变量名_Variables_Sas_Names - Fatal编程技术网

Variables 来自其他变量的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 我确实有

我试图根据其他变量中包含的数据创建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   
我确实有一种方法可以做到这一点,但它需要一些难看的宏来首先创建所需的变量(使用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转置应该更快,也可能更灵活,但在某些情况下,这可能会更好