簡體   English   中英

SAS在數據步驟中調用ProcSQL-Macro

[英]SAS Calling ProcSQL-Macro in Data Step

我無法通過在“數據”步驟中調用宏來運行PROC SQL函數。 僅SQL函數起作用,但是我需要讓它在每個安全組中運行。

%macro adding;
        proc sql;
        insert into have (Time,seconds) values
        ("9:10:00"t,33000);
        insert into have (Time,seconds) values
        ("16:50:00"t,60600);
        quit;
%mend;

data have;
set have;
by security;
if first.security then %adding;
if seconds=33000 then date=lag(date);
if seconds=60600 then date=lag(date);
run;

錯誤是:

1 proc sql; 插入具有(時間,秒)的值

---- ------


  180 180 180 180 1 ! ("9:10:00"t,33000); insert into have (Time,seconds) values 1 ! 

(“ 16:50:00” t,60600); 放棄; 錯誤180-322:語句無效或使用不正確。

我不知道該如何更改才能使用它...

感謝您的幫助! 最好

使用調用執行來調用宏。

If first.security then call execute('%adding');

但是,宏將在數據步驟之后而不是在數據步驟之后運行。 同樣,嘗試以多種方式在適當位置更改數據可能會導致調試困難。 您的DATA,SET和SQL都引用相同的數據集。

如果您嘗試更改proc中的數據並添加記錄,則可能要考慮在數據步驟本身中使用顯式OUTPUT語句。 如果需要,可以使用宏來生成這些語句。

 If first.security then do;
     Time=...;
      Seconds=....;
     Output;
     Time=....;
      Seconds=....;
      Output;
  End;

   *rest of SAS code;
   Output; Add an explicit output if required;
   Run;

您也不應該有條件地計算滯后值,因為滯后是一個隊列。 您會得到意想不到的行為。 我沒有重點介紹您的流程中的所有問題,但這足以幫助您找到其余的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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