创建一个宏变量以存储数据集的所有变量名

时间:2019-05-28 19:39:35

标签: sas

我是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中似乎很难实现...请帮助。非常感谢你!

2 个答案:

答案 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.data1Data2Varkey1key2中的那些值。