通过 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)
这是我的 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)