Macros 将PDV变量传递给SAS中的宏

Macros 将PDV变量传递给SAS中的宏,macros,sas,Macros,Sas,在我的程序中,我想在SAS中将所有变量从列传递到宏。我有这样的代码: data _null_; set T.BetterSet; %test(myCollumn); run; 这是一个简单的宏: %macro test(variable); data &variable; set End.DatasetpreparedForAnalisys; where &variable <= 0; keep vin3 &variable; run; %mend; %宏测

在我的程序中,我想在SAS中将所有变量从列传递到宏。我有这样的代码:

data _null_;
set T.BetterSet;
%test(myCollumn);
run;
这是一个简单的宏:

%macro test(variable);

data &variable;
set End.DatasetpreparedForAnalisys;
where &variable <= 0;
keep vin3 &variable;
run;

%mend;
%宏测试(变量);
数据与变量;
设置End.DatasetpreparedForAnalisys;

where&variable您的代码不会以这种方式工作,因为您在另一个数据步骤中发出数据步骤语句。要做到这一点,你需要以不同的方式进行设置。下面是如何做到这一点

首先,让我们生成一个名为columns的数据集(冒充您的
T.BetterSet
表),我们将在其中插入值
column1
column2
column5
——也就是说,我们希望稍后在同名表中看到复制的列

data columns;
  informat column $32.;
  input column;
  datalines;
column1
column2
column5
;
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
;
然后,我们将生成包含列
column1
column5
的示例数据(冒充您的
End.DatasetpreparedForAnalisys
表)。考虑到
表的内容,以后只有第1、2和5列将成为独立表

data columns;
  informat column $32.;
  input column;
  datalines;
column1
column2
column5
;
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;
日志现在显示:

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.
(...)
注意:从数据集WORK.COLUMNS中读取了3个观察值。
注:使用的数据说明(总处理时间):
实时0.00秒
cpu时间0.00秒
注意:调用执行生成的行。

1+数据列1;设置样本数据;第1列:为什么要在另一个数据步骤中运行一个数据步骤?另外,你能解释一下“将所有变量从一列传递到一个宏”是什么意思吗?我不知道你到目前为止是如何做到这一点的。你是想传递变量值还是变量名?不是这样做的。使用callexecute。