1

我有一个数据集,其中有一列包含 45 个变量的列表 - 它被称为“输出”。在另一个数据集中,我有 200 个变量的时间序列数据。第一行顶部的变量名称和整个时间的值都在列中。因此,例如,对于变量的名称,我将失业放在首位,而在其下的整个时间段内的失业值。GDP 等也是如此——这个数据集被称为“全部”。

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

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

如果有人可以提供帮助,我将不胜感激。谢谢, SE

4

3 回答 3

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;
于 2013-06-19T12:28:47.453 回答
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;
于 2013-06-19T03:07:54.637 回答
1

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

proc transpose data=work.narrow_file1
out=work.narrow_file1_transp_prefix
prefix=pet_count;
run;
于 2013-06-19T02:00:20.253 回答