2015-06-13 50 views
0

我有一個每年生成一次的報告。每個報告都有名稱內的年份形式 - report-2011.xls,report-2012.xls等。每個報告包含以下變量:ID,SAL =當年平均月薪,性別(0 =男性,1 =女性),已婚(0 =未結婚,1 =已婚),我需要創建一個宏,根據性別類型和已婚類型計算每年工資的平均值,最小值和最大值。在宏中,我需要包含相關年份的參數。 如何在計算這些參數時分別參考每種類型? 以及如何爲年份var創建單獨的參數?在sas中創建一個宏

+0

也許您可能需要一個infile語句/ pipe語句來讀取excel文件,併爲1)year = 2011,2012 ...建立宏,2)其中gender = 1/0的數據步驟3)已婚類型= 1/0,4)調用symputx報告答案。請先顯示你先試過的東西。 – yukclam9

+0

我沒有數據的特定文件以便將其讀入sas,問題是我需要創建一個宏,它將根據定義的參數來模擬此過程。是否有可能沒有一個實際的文件? – user3581800

回答

0

proc summary允許您準確控制想要跨越數據的方式。

%macro report(year); 

proc import datafile="/path/to/report-&year..xls" 
    out= salary_data                               
    dbms=csv replace ;                              


proc summary data = salary_data; 
    class married gender; 
    types married gender married*gender; 
    var sal; 
    output out = salary_results mean(sal) = mean_salary std(sal) = std_salary; 

* Print the summary; 
proc print; 

* Delete the data and summary after using them; 
proc delete data= salary_data salary_results; run; 


%mend report; 

請注意,proc彙總會產生其他有用的信息,您可以閱讀有關here的其他信息。如果你不需要它們,你可以放下它們。

0
%macro reporting(year, gender, marital_status); 
    proc means data=data&year min max std; * <== you should have separate datasets for different years 
    class gender married ; 

%mend reporting 

%reporting(2015, 1, 1) 

這是你正在尋找的東西嗎?

+0

by%reporting(2015,1,1)實際上,我從2015年起生成一份報告所需的統計數據,其中女性已婚?但我實際上需要創建一個宏來分別爲女性和男性分別計算(平均,最小,最大和標準)薪金變量(婚姻狀況也一樣)。 – user3581800

+0

在這種情況下,使用'class'將不那麼麻煩。 – yukclam9

0

我的宏只是一種生成代碼的方法。所以首先設計你想要它產生的代碼。然後你可以弄清楚它的哪些部分有所不同,並用宏變量引用替換它們。宏變量然後成爲您的宏的參數。

proc import datafile="report-2011.xls" out=report_2011 ; run; 
proc means data=report_2011 ; 
    class gender married; 
run;