取样输入数据:
FirstName LastName Group Age LastVenue Position
Jack Smith ULDA 25 TheaterA 1
Jesse James GODL 37 TheaterB 12
Jane Doe ULDA 29 TheaterA 3
Izzy Gord IIPA 41 TheaterC 8
Ann Roswell GODL 30 TheaterB 16
Chelsea Jenk ULDA 19 TheaterA 11
如何用条件创建这个宏?
我想创建:
%macro group_members(group=); proc print data=sample; var Position Age Group FirstName LastName; where group=&group; %mend group_members;
但是我想为它添加条件,所以如果没有输入任何内容%group_members()
那么它将显示所有组的变量顺序如上所示。如果在这种情况下输入了一个无效的组:%group_members(LOL)
那么我希望将一个注释发送到日志%put 'An invalid group was entered'
。因此没有什么应该打印。我正尝试在一个更大的数据集上创建一个非常相似的程序。
我感谢任何帮助先进!谢谢:)
到目前为止,我曾尝试:
%macro group_members(group=); proc sql; select count(*) into :ct from sample where group="&group" quit; proc print data=sample; %if &group ^= %then %do; where group="&group."; %end; %if &ct = 0 %then %put An Invalid group was entered; %else %do; where group="&group."; %end; run; %mend group_members;
我得到的错误,从每一个测试。例如%group_members()
返回一个错误:
ERROR: More positional parameters found than defined
谢谢你的代码中的注释!我是SAS Macro的新手。我会放置proc sql; proc打印之前的宏内部? – Jax 2015-02-24 01:17:22
是的,'&group'宏变量在宏外不可用,所以它在外面是没有意义的。 – mjsqu 2015-02-24 01:18:26
我试过这个,但我不能得到它的工作......这是我有:'%macro group_members(group =); \t proc sql; \t select count(*)into:ct \t from sample where group =“&group” quit; \t proc print data = sample; \t%if&group^=%then%do; \t where team =“&group。”; \t%end; \t%if&ct = 0%then%put一个无效组被输入; \t%else%do; \t其中group =“&group。”; \t%end; \t run; %修补group_members; %group_members()' – Jax 2015-02-24 02:26:05