簡體   English   中英

SAS Proc SQL INTO - 無法將宏變量寫入宏?

[英]SAS Proc SQL INTO - Cannot write a macroed variable into macro?

data COLUMN_LIST_DATA;
length COLUMN_LIST CATEGORY $8.; 
input COLUMN_LIST CATEGORY;
datalines;
COL1 MY_COLS
COL2 OTHER
COL3 MY_COLS
COL4 OTHER
COL5 OTHER
;
run;
%macro TBL_Keep(var); %macro _; %mend _;

        PROC SQL NOPRINT;
            *Create SELECT statement for columns we want;
            SELECT COLUMN_LIST INTO: &var. SEPARATED BY ' '
            FROM COLUMN_LIST_DATA
            WHERE CATEGORY = "&var."
            ;
        QUIT;
%mend;

%TBL_Keep(MY_COLS);
%put &MY_COLS.;

不知道為什么上面的代碼不起作用.... INTO 不接受宏變量作為輸入嗎? 如果我編寫相同的代碼,手動替換宏“&var”。 使用“MY_COLS”可以正常工作。

第一個問題是,如果在調用%TBL_KEEP()之前名為 MY_COLS 的宏變量不存在,那么宏變量將是 LOCAL 並在宏執行結束時消失

在調用宏以確保它存在之前,您可以將其設置為某個默認值。

%let my_cols=BEFORE THE CALL;
%TBL_Keep(MY_COLS);
%put &=my_cols;

或者通過發出 %GLOBAL 語句使宏足夠智能以強制宏變量存在。 在更改宏定義時,您還應該解決第二個問題:如果沒有觀察結果與查詢中的 WHERE 條件匹配,則宏變量的值將不會更改。

%macro TBL_Keep(var); 
%if not %symexist(&var) %then %global &var;
%let &var= ;
PROC SQL NOPRINT;
SELECT COLUMN_LIST
  INTO :&var. SEPARATED BY ' '
  FROM COLUMN_LIST_DATA
  WHERE CATEGORY = "&var."
;
QUIT;
%mend TBL_Keep;

暫無
暫無

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

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