【发布时间】:2015-10-05 20:19:20
【问题描述】:
我对 SAS 非常陌生,并尝试学习做事的最佳实践。我尝试编写一个简单的宏来挑选特定数据集中具有缺失值的任何给定字段。这个想法是遍历每条记录(行)并让 do(for) 循环在 if 语句中充当 OR。我的问题是
- 我的理解是,宏一旦被调用,就应该为我的数据集中的每一行执行一次,但在这种情况下,它似乎只执行一次(也就是说,do 循环似乎只执行一次而不是100 次)。
-
有更好的方法吗?
/* say I have a dataset with fieldA fieldB fieldC fieldD etc. and 100 records, some of which were missing */ %let varList = fieldA fieldB; /* check fieldA and fieldB */ %ReportIncompleteFields(sasdata.myDAta, &varList., work.tempData); %macro ReportIncompleteFields(inDataName, chkVars, outDataName); %let numVars = %sysfunc(countw(&chkVars.)); length keepRrd 8; keepRcd = 0; data &outDataName.; set &inDataName.; %do ii = 1 %to &numVars.; %let iiVarName = %scan(&chkVars., &ii.); %if &iiVarName. = '' %then keepRcd=keepRcd+1; %end; %if keepRcd=0 %then delete; run; %mend ReportIncompleteFields;
【问题讨论】: