2017-10-12 40 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做到了。非常感谢! –