2014-04-30 96 views
0

我有一個在宏代碼中創建的表。有了這個表我需要創建一個提示。爲了創建提示,我在第二部分有另一個宏。我怎樣才能結合這兩個代碼。它給出了錯誤。說的數據是不存在的:爲非缺失變量創建提示

%macro bygroup(y); 
    data recommendations_macro; 
    set recommendations (where=(maingroup=&y)); 
    run; 

    data issues_macro; 
    set issues (where=(maingroup=&y)); 
    run; 

    proc sort data=recommendations_macro (drop=issue); 
    by SFVFDBK_STUDENT_PIDM count; 
    run; 

    proc sort data=issues_macro (drop=Recommendation ); 
    by SFVFDBK_STUDENT_PIDM count; 
    run; 

    data rec_and_issues ; 
    merge recommendations_macro (in=a) 
     issues_macro (in=b); 
    by SFVFDBK_STUDENT_PIDM count; 
    if a or b; 
    run; 
%mend; 

創建的表在這裏,我需要添加此則:

%macro missing_or_nonmissing(sel=); 
    %let not = %sysfunc(ifc(&sel=NonMissing,not,)); 

    SVFDBK_FEEDBACK_COMMENTS is &not. null 
%mend missing_or_nonmissing; 

DATA rec_and_issues; 
    set rec_and_issues; 
    where %missing_or_nonmissing(sel=&sel_issue) ; 
run; 

proc sort data=rec_and_issues (where=(%missing_or_nonmissing(sel=&sel_issue.))); 
    by SFVFDBK_STUDENT_PIDM; 
run; 
+0

後續問題:http://stackoverflow.com/questions/23295411/creating-prompt-for-missing-and-nonmissing? – mjsqu

+0

你可以添加你運行的代碼嗎?並返回確切的錯誤信息?你說'數據不存在',哪個數據集指的是? – mjsqu

+0

我使用了與第一個相同的代碼。然後錯誤「錯誤:文件WORK.REC_AND_ISSUES.DATA不存在」。謝謝 – user3489870

回答

1
 
%macro bygroup(y); 
    proc sort data=recommendations (where=(maingroup=&y) drop=issue) 
     out=recommendations_macro; 
    by SFVFDBK_STUDENT_PIDM count; 
    run; 

    proc sort data=issues (where=(maingroup=&y) drop=recommendation) 
      out=issues_macro; 
    by SFVFDBK_STUDENT_PIDM count; 
    run; 

    data rec_and_issues ; 
    merge recommendations_macro (in=a) 
      issues_macro (in=b); 
    by SFVFDBK_STUDENT_PIDM count; 
    if a or b; 
    run; 
%mend; 

%bygroup('hello') 

我還要改變where=數據集選項來與之匹配列的類型爲maingroup。例如

如果字符:

where maingroup="&y"

如果數字:

where maingroup=&y

這樣的宏調用可以簡化爲:

%bygroup(test)

%bygroup(3)

分別

+1

至少,做那些在PROC SORT語句 - 沒有理由有這些數據步驟另外。 – Joe

+0

對不起,我正在使用移動應用程序...編輯... – mjsqu

+0

同意@Joe,我通常會誠實地使用PROC SQL,但它有時會有助於逐步改進代碼以用於說明目的。 – mjsqu