我是sas的初学者。 我有一个数据集work.data2,其变量包含另一个数据集work.data1中的所有变量。
这是我想要做的:
data temp;
set data2 (keep = [list of all variables in data1] key2 key3);
run;
首先,我需要创建一个宏变量以将所有变量名称存储在data1中。 如果在python中,我可以做
List=list(data1)
但是在sas中似乎很难实现...请帮助。非常感谢你!
答案 0 :(得分:1)
有很多方法可以将变量名列表输入数据。您可以将PROC CONTENTS与OUT =选项一起使用。或从PROC SQL查询DICTIONARY.COLUMNS元数据。 (或指向相同元数据的视图SASHELP.VCOLUMN)。
但这是不需要拉名称的方法。首先制作一个空的新数据集,其结构与DATA1相同,外加其他变量。然后附加来自DATA2的数据。
data temp;
set data1(obs=0) data2(obs=0 keep=key1 key2);
run;
proc append base=temp data=data2 force;
run;
答案 1 :(得分:1)
有几种方法可以给这只猫蒙皮。这是一种方法:
假设所有变量名称都存储在Data2Var
中名为work.data2
的变量(列)中,那么这应该起作用:
proc sql noprint;
select Data2Var into: VarList separated by " "
from
work.data1;
quit;
data work.temp;
set work.data2(KEEP = &VarList key1 key2);
run;
基本上,这是在代码的第一个proc sql
块中创建一个宏变量,该变量由Data2Var
数据集中的列work.data1
中的每个值组成,并用空格。然后,在读取&Data2Var
数据集时,在您的keep语句上调用此宏变量(data2
)。然后,所得的数据集work.temp
仅包含work.data1
列Data2Var
和key1
和key2
中的那些值。