以下示例非常簡單,可以通過更簡單的方式解決。但是,我有興趣使其工作。以下示例基於sashelp庫的cars-dataset。首先,我有一個宏叫好玩:如何在更新宏變量並立即使用該值的數據步驟中調用宏?
proc contents data = sashelp.cars out = mycontents;
run;
%macro fun(var);
proc sql noprint;
select count(distinct(&var.))
into :obs
from sashelp.cars;
quit;
%mend;
現在我想調用宏但只更新OBS(從輸入語句)。我用:
data work.test;
set mycontents;
if name ne "Type" then do;
call execute('%nrstr(%fun('||name||');');
new = &obs;
end;
else new = 5;
run;
總之,這應該迭代mycontents的行。然後根據名稱調用一個(幾個)宏,這會更新obs。然後,我可以簡單地使用obs填充新的列。但是,obs對所有名稱保持相同的值,這是來自最後一個變量的值。
好問題,寫得很好! – Joe
@Snorehorse(1)標題不需要說明它是一個SAS問題 - 標籤就是這樣做的。 (在google上,例如,標籤會隨着頁面一起出現。) – Joe
(2)我不認爲'CALL EXECUTE'對於這個問題很重要;上面的標題有點寬泛,會有更多的點擊,而且'CALL EXECUTE'無論如何都會觸發這個帖子,因爲它在主體中。我會添加空間,你在那裏是正確的。 – Joe