如何根据 SAS 工作文件中的观察数 运行 宏的一部分
How to run part of macro based on number of observations in work file in SAS
我对在 SAS 上做宏还很陌生,如果我的问题看起来很基础,请提前致歉。
如果在临时工作文件中找到最少数量的观察结果,我希望执行部分宏。
如果有最小数量的观察,宏应该执行该临时工作文件的 proc 导出,否则它只会在日志中产生一条错误消息。
我不确定我做错了什么,临时工作文件有超过 1 个观察,我希望宏为 运行,但是它产生的错误消息好像少于最小值。
以下是我到目前为止创建的代码 - 非常欢迎您提供任何帮助。
data original_data;
set data.dataset;
keep column1 column2 column3 ;
run;
%macro test_macro;
%let dsid=%sysfunc(open(work.original_data));
%let nobs=%sysfunc(attrn(&dsid,nobs));
%let dsid=%sysfunc(close(&dsid));
%if &nobs >1 %then %do;
%put ERROR: No observations counted;
%return
%end
%else %do;
proc export data=submissions
outfile='C:\Users\myusername\Desktop\test.csv'
DBMS=csv replace;
run;
%end;
%mend test_macro;
%test_macro
- RETURN 和 END 语句中缺少分号
- 逻辑反了。如果您有多个观察结果,您就会输入错误消息。翻转您的代码,以便在您有多个观察结果时导出。
options mprint symbolgen;
%macro test_macro;
%let dsid=%sysfunc(open(work.original_data));
%let nobs=%sysfunc(attrn(&dsid, nobs));
%let dsid=%sysfunc(close(&dsid));
%put &nobs;
*if more than one observation;
%if &nobs > 1 %then
%do;
proc export data=sashelp.class outfile='/home/fkhurshed/test.csv' DBMS=csv
replace;
run;
%end;
%else
%do;
%put ERROR: No observations counted;
%return;
%end;
%mend test_macro;
%test_macro;
我对在 SAS 上做宏还很陌生,如果我的问题看起来很基础,请提前致歉。
如果在临时工作文件中找到最少数量的观察结果,我希望执行部分宏。
如果有最小数量的观察,宏应该执行该临时工作文件的 proc 导出,否则它只会在日志中产生一条错误消息。
我不确定我做错了什么,临时工作文件有超过 1 个观察,我希望宏为 运行,但是它产生的错误消息好像少于最小值。
以下是我到目前为止创建的代码 - 非常欢迎您提供任何帮助。
data original_data;
set data.dataset;
keep column1 column2 column3 ;
run;
%macro test_macro;
%let dsid=%sysfunc(open(work.original_data));
%let nobs=%sysfunc(attrn(&dsid,nobs));
%let dsid=%sysfunc(close(&dsid));
%if &nobs >1 %then %do;
%put ERROR: No observations counted;
%return
%end
%else %do;
proc export data=submissions
outfile='C:\Users\myusername\Desktop\test.csv'
DBMS=csv replace;
run;
%end;
%mend test_macro;
%test_macro
- RETURN 和 END 语句中缺少分号
- 逻辑反了。如果您有多个观察结果,您就会输入错误消息。翻转您的代码,以便在您有多个观察结果时导出。
options mprint symbolgen;
%macro test_macro;
%let dsid=%sysfunc(open(work.original_data));
%let nobs=%sysfunc(attrn(&dsid, nobs));
%let dsid=%sysfunc(close(&dsid));
%put &nobs;
*if more than one observation;
%if &nobs > 1 %then
%do;
proc export data=sashelp.class outfile='/home/fkhurshed/test.csv' DBMS=csv
replace;
run;
%end;
%else
%do;
%put ERROR: No observations counted;
%return;
%end;
%mend test_macro;
%test_macro;