簡體   English   中英

如何在put語句中使用函數? SAS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM