通过 SAS EG 中的提示实现宏自动化

Macro Automization via Prompts in SAS EG

这是我的 table

 data:
 ax bx cx dx ex fx
 1   2  3  4  5 5
 2   3  5  1  0 5
 3   7  8  9  1 4

这是我的基本代码

%macro example(c= , b= ,a= );
 data temp;
 set  data;
diff = &c-(&b+&a);
run;
%mend example;
% example(c=cx ,b=bx ,a=ax)

我想通过在 SAS EG 中设置类似提示的功能来自动化 diff = c-(b+a) 但我不知道该怎么做?我的目标是能够在 "diff" 方程中更改我的特征(例如代替 cx,我想放入 f 或代替 ax、e 等等),因为我的实际数据包含数千列。 如果你能帮助我,我将不胜感激。

要自动执行此操作,您可能需要发出三个提示。每个变量 (c,b,a) 一个。 (当然,称它们为描述性的名称,而不是 c、b、a!)Select "use throughout project" 和 "requires non blank value"。也许添加一些更有用的文字来描述它们是什么。

然后,您需要有一种填充它们的方法。您可以从静态列表中填充它们(在其中输入可能的值),就像打开文本框一样,您每次都在其中键入它们,或者您可以从数据源中填充它们。从数据源填充的机制取决于您的本地设置 - 例如,您使用的是 "local EG" 还是 EG 连接到元数据服务器 - 但总体而言应该相当简单。

在"User selects values from a static list",select "Get values",然后"Browse" SAS数据文件;或 "User selects values from a dynamic list",做同样的事情。后者将始终检查数据源的更新,而前者只是在提示创建时填充列表。

最后,在您的程序中,您的宏调用将如下所示:

%example(c=&c ,b=&b ,a=&a)

其中 &c &b &a 是提示名称('short' 名称,如果您还给它一个较长的文本名称)。

你想要的是这样的:

/*Define Prompt*/
%window info
  #5 @5 'Var1:'
  #5 @13 var1 2 attr=underline
  #7 @5 'Var2:'
  #7 @13 Var2 2 attr=underline
  #9 @5 'Var3:'
  #9 @13 Var3 2 attr=underline;

/*Show Prompt*/
%display info;

/*Display Macro Variables in the Log*/
%put &var1;
%put &var2;
%put &var3;

%example(c=&var1 ,b=&var2 ,a=&var3)