仅保留在单独的变量名称列表中指定的变量

时间:2013-06-18 20:17:02

标签: merge dataset sas proc-sql

我有一个数据集,其中有一列包含45个变量列表 - 它被称为“输出”。 在另一个数据集中,我有200个变量的时间序列数据。第一行顶部的变量名称和整个时间的值都在列中。因此,例如,我认为变量名称和失业率在整个时间内处于最高位置。对于GDP等也是如此 - 该数据集称为“全部”。

我喜欢从数据集“out”调用45个cariables,并使用只有45个变量的“All”创建一个较小的表。

我使用proc sql; create table TABLE,但我不确定如何完成代码。我的想法是定义一个列表并将该列表引入proc sql以生成较小的表,但是我无法使其工作。

如果有人可以帮助我,我感激不尽。 谢谢,SE

3 个答案:

答案 0 :(得分:3)

这是一个非常简单的proc sql解决方案。

proc sql noprint;
select col_name into :vars separated by ' ,'
from output;
quit;

proc sql;
create table want as select &vars.
from all;
quit;

答案 1 :(得分:2)

一种选择是将变量列表连接到一个宏变量中,并使用它来保持你想要的。这就是我的想法:

data output;
    Input VariableName $;
    datalines;
    One
    Two
    Three
Run;

data a; *_NULL_;
    Retain VariableList;
    Length VariableList $1000;
    Set Output end=end;
    VariableList = Catx(" ", VariableList, VariableName) ;
    If End Then Call Symput('MyVariableList', VariableList);
run;

%put &MyVariableList;

data Want;
    Set All;
    Keep &MyVariableList ;
run;

答案 2 :(得分:1)

您可以在第二个数据集中使用proc transpose,因为您没有提供太多数据我可以提供一个如何使用该语句的简单示例,请参阅此documentation以获取更多信息。

proc transpose data=work.narrow_file1
out=work.narrow_file1_transp_prefix
prefix=pet_count;
run;