这是我的表
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),但我不知道该怎么做?我的目标是能够改变我的功能(例如cx,我想把f或者代替ax,e等等)在" diff"因为我的实际数据包含数千列。 如果你帮助我,我很感激。
答案 0 :(得分:0)
要自动执行此操作,您可能需要提示三个提示。每个变量一个(c,b,a)。 (当然,称它们为描述性的,而不是c,b,a!)选择“在整个项目中使用”和“需要非空白值”。也许添加一些更有用的文字来描述它们是什么。
然后,你需要有一种方法来填充它们。您可以从静态列表中填充它们(输入可能的值),就像打开文本框一样,您每次都可以自己键入它们,或者您可以从数据源填充它们。从数据源填充的机制取决于您的本地设置 - 例如,您使用“本地EG”还是EG连接到元数据服务器 - 但总的来说它应该相当简单。
在“用户从静态列表中选择值”,选择“获取值”,然后选择“浏览”SAS数据文件;或“用户从动态列表中选择值”,也这样做。后者将始终检查数据源是否有更新,而前者只是在创建提示时填充列表。
最后,在您的程序中,您的宏调用将如下所示:
%example(c=&c ,b=&b ,a=&a)
其中&c &b &a
是提示名称(如果您为其提供了更长的文本名称,则为“短名称”)。
答案 1 :(得分:0)
你想要的是这样的:
/*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)