SAS - 通过将文本连接到当前宏变量来动态创建宏变量

时间:2017-10-12 14:09:35

标签: sas sas-macro

我正在寻找创建一个宏变量。宏变量名称需要通过在解析之后将文本连接到已存在的变量来完成。具体来说,我想使用 INTO: PROC SQL 块中执行此操作。这是解释我想要做什么的片段。

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

如果我打电话给这个宏,我会传出“#34; cat"进入进程,我想现在声明/初始化一个名为 cat_new_text 的变量,每当&& 时,它应返回在该查询中选择的COUNT(*) ;引用了cat_new_text 。

我已经做了一些阅读,研究了使用多个&符号,试图首先在引号内解决和处理 - 没有什么能真正解决我的确切问题。有没有人知道一个明确的方法来实现这个目标?

提前致谢!

1 个答案:

答案 0 :(得分: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;