2017-10-12 82 views
1

我期待創建一個宏變量。在解析後,宏變量名需要通過將文本連接到已存在的變量來完成。具體而言,我想在PROC SQL塊中使用INTO:執行此操作。這裏有一個片段來解釋我想要做什麼。 SAS - 通過將文本串聯到當前宏變量動態創建宏變量

%macro MyMacro(process); 
    PROC SQL; 
     SELECT 
      COUNT(*) INTO: &process._new_text 
     FROM 
      DataSetHere 
    ;QUIT; 
%mend MyMacro; 

如果我呼籲這個宏和我通字「貓」到過程,我想現在已經宣佈/初始化名稱cat_new_text一個變量,它應該返回COUNT (*)只要在該查詢中選擇& cat_new_text被引用。

我已經做了一些周圍的閱讀,看着使用多個&符號,試圖首先解決&過程中的引號 - 沒有什麼能真正解決我的確切問題。有誰知道一個明確的方法來完成這個?

在此先感謝!

+1

我建議增加'noprint'的PROC SQL語句,否則將選定的值打印到上市每次宏運行時區域。 – user667489

回答

2

你的代碼看起來很好,它看起來像它會做你所描述的。 但是,如果你試圖「訪問」宏之外的新的宏變量,例如,

%MyMacro(cat); 
%put &cat._new_text.; 

那麼它的確是行不通的,因爲變量在宏本地創建的,這個範圍之外不存在宏。

爲了解決這個問題,你只需要在你的宏定義添加%global聲明:

%macro MyMacro(process); 
    %global &process._new_text; 
    PROC SQL; 
    SELECT COUNT(*) 
    INTO: &process._new_text 
    FROM DataSetHere 
    ; 
    QUIT; 
%mend MyMacro; 
+0

%GLOBAL做到了。非常感謝! –