【发布时间】:2017-01-12 02:28:44
【问题描述】:
我需要一种方法来动态返回当前数据步骤中的变量数。
使用SAS NOTE 24671: Dynamically determining the number of observations and variables in a SAS data set,我想出了以下宏。
%macro GetVarCount(dataset);
/* Open assigns ID to open data set. Assigns 0 if DNE */
%let exists = %sysfunc(open(&dataset));
%if &exists %then
%do;
%let returnValue = %sysfunc(attrn(&exists, nvars));
%let closed = %sysfunc(close(&exists));
%end;
/* Output error if no dataset */
%else %put %sysfunc(sysmsg());
&returnValue
%mend;
不幸的是,由于尚未创建数据集,因此在数据集的初始传递时会出错。第一遍之后,创建了一个包含 0 个观测值的数据集,宏可以访问表和变量数。
例如,
data example;
input x y;
put "NOTE: [DEV] There are %GetVarCount(example) variables in the EXAMPLE data set.";
datalines;
1
2
;
run;
第一次运行产生:
ERROR: File WORK.EXAMPLE.DATA does not exist.
WARNING: Apparent symbolic reference RETURNVALUE not resolved.
NOTE: [DEV] There are &returnValue variables in the EXAMPLE data set.
第二次运行产生:
NOTE: [DEV] There are 2 variables in the EXAMPLE data set.
有没有办法在第一次运行数据步骤时获取数据集中变量的数量?
【问题讨论】:
-
日志不是已经这样做了吗?如果运行成功,它会输出使用 X 变量和 Y 观测值创建的 Dataset x?我看不出这会如何增加任何东西。此外,在什么阶段,数据步骤可以创建变量,那么您对输入数据集、最终输出数据集或其他内容感兴趣吗?是所有变量都已处理,还是仅在最终数据集中输出。
-
如果您确实想这样做,一种方法可能是使用 CALL VNEXT,但请注意自动变量已列出,您需要将其过滤掉。 support.sas.com/documentation/cdl/en/lefunctionsref/69762/HTML/…