取樣輸入數據:
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