您的代码不会以这种方式工作,因为您是在另一个数据步骤中发出数据步骤语句。要做到这一点,您需要以不同的方式进行设置。以下是操作方法。
首先让我们生成一个名为列的数据集(冒充您的T.BetterSet 表),我们将在其中插入值column1、column2 和column5——即我们想要的列请参阅稍后在同名表中复制。
data columns;
informat column $32.;
input column;
datalines;
column1
column2
column5
;
然后我们将生成包含列column1 到column5 的示例数据(冒充您的End.DatasetpreparedForAnalisys 表)。鉴于columns 表的内容,稍后只有第 1、2 和 5 列将成为独立表。
data sampleData;
informat column1-column5 8.;
input column1-column5;
datalines;
12 -1 2 3 0
-2 -3 -1 0 -3
0 -4 -5 -2 -9
-1 -5 4 2 0
;
现在我们声明一个宏%createTable,它将发出为各个列创建输出数据集所需的所有语句。
%macro createTable(col);
data &col;
set sampleData;
where &col <= 0;
keep &col;
run;
%mend;
现在全部设置为使用call execute 例程。使用call execute 可以让您在我们可以称之为“并行”过程中发布语句;也就是说,这些语句不会包含在当前数据步骤中,而是作为独立的语句块发送,由 SAS 编译和执行。请注意,'%createTable' 宏调用放在单引号 中。这是关键,否则你会遇到问题。
data _null_;
set columns;
call execute(cats('%createTable(', column, ')'));
run;
日志现在显示:
NOTE: There were 3 observations read from the data set WORK.COLUMNS.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
NOTE: CALL EXECUTE generated line.
1 + data column1; set sampleData; where column1 <= 0; keep column1; run;
NOTE: There were 3 observations read from the data set WORK.SAMPLEDATA.
WHERE column1<=0;
NOTE: The data set WORK.COLUMN1 has 3 observations and 1 variables.
(...)
2 + data column2; set sampleData; where column2 <= 0; keep column2; run;
NOTE: There were 4 observations read from the data set WORK.SAMPLEDATA.
WHERE column2<=0;
NOTE: The data set WORK.COLUMN2 has 4 observations and 1 variables.
(...)
3 + data column5; set sampleData; where column5 <= 0; keep column5; run;
NOTE: There were 4 observations read from the data set WORK.SAMPLEDATA.
WHERE column5<=0;
NOTE: The data set WORK.COLUMN5 has 4 observations and 1 variables.
(...)
从而确认
- 在名为 column1 的新表中的 column1 中保留了 3 个观察值
- 4 个观察值保留在名为 column2 的新表中的 column2 中
- 从名为 column5 的新表中的 column5 中保留了 4 个观察值