[英]How do I use a function within a put statement? SAS
我正在嘗試向SAS Log打印一條語句,警告用戶某些程序沒有運行。 為此,我使用put語句打印到SAS日志:
%let step1 = My program;
%let rec= cats(&step1.);
data _null_;
put "** &rec. did not run";
run;
put語句打印:“** cats(我的程序)沒有運行”。 有誰知道為什么貓的功能沒有執行? 我猜它與在SAS語句之前執行的宏代碼有關,但我不知道如何使這項工作。
編輯
謝謝Reeza和湯姆。 現在我理解為什么這不起作用 - 我必須使用%sysfunc來使用數據步驟之外的函數,並且我不能在put語句中使用函數。
湯姆 - 你問了一個更完整的例子:
我正在嘗試將語句打印到SAS日志中,以便用戶可以輕松查看已運行的程序以及跳過的程序。 我正在嘗試完成以下操作:
data _null_;
array steps(*) $ step1-step7;
do i=1 to dim(steps);
if symget(cats('run',i)) = 'N' then
put "** The program "symget(cats('run',i)" did not run";
end;
run;
我想如果我能弄清楚如何在put語句中執行函數,這段代碼就行了。 但是,這是不可能的。 不過,我應該可以使用“i”來改變變量。
例如,當i為1時,put語句應為“程序file1.sas未運行”。
當我是2時,put語句應該是“程序file2.sas沒有運行”,依此類推。
我試過用:
put "** The program &&step&i did not run";
但SAS無法識別我的變量。
希望這提供了更多的背景!
您可以添加%SYSFUNC()以使用數據步驟之外的函數,但在這種情況下,CATS不會向您的流程添加任何值。
%let step1 = My program;
%let rec= %sysfunc(cats(&step1.));
data _null_;
put "** &rec. did not run";
put "** &step1. did not run";
run;
輸出:
293
294
295 %let step1 = My program;
296 %let rec= %sysfunc(cats(&step1.));
297
298 data _null_;
299 put "** &rec. did not run";
300 put "** &step1. did not run";
301 run;
** My program did not run
** My program did not run
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
如果您正在運行宏,則只需使用%DO
循環。
%do i=1 %to 7 ;
%if (N=&&run&i) %then %put NOTE: The program &&step&i did not run;
%end;
否則只需使用數據步變量並打印即可。
data _null_;
do i=1 to 7 ;
if symget(cats('run',i)) = 'N' then do;
length program $100 ;
program=symget(cats('step',i));
put 'NOTE: The program ' program 'did not run';
end;
end;
run;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.