[SAS] 使用%SYSFUNC操作macro變數值計算平均
之前[SAS] macro_macro expressions01有提到如何在macro環境內判斷算數運算(Arithmetic expression)
例如計算除法、加法、更進一步涉及小數點的運算,該文提到兩個函數「%eval」與「%sysevalf」。
%sysevalf與%eval的不同點在於當遇到小數點運算,例如10.5+20.8
%eval並不支援小數點的值,所以會有error出現
這時候就建議使用%sysevalf做計算,此外%sysevalf還可以進行取整數、四捨五入等設定!
本文將提到另外一個%sysfunc函數,同樣也是在處理算術運算會遇到的狀況…
首先介紹一下%sysfunc函數
%sysfunc函數可以將SAS程式語言中的函數應用到macro程式內
透過%sysfunc的傳遞,(可以想成連接的作用),你就可以在macro程式中彈性使用SAS語言的函數
舉個例子:
%let a=1.5;
%let b=-2.0;
%let c=1.978;
%let d=-3.5;
現在有4個macro變數,各別都是一個值(text),現在目標是計算a+b+c+d的平均值
在尚未學到%sysfunc前,會想到說既然macro不會辨認文字數字,都會將值視為text的話
不如用%sysevalf來做算數計算
%let meanstat=%sysevalf((&a+&b+&c+&d)/4);
%put ***The mean is &meanstat***;
***The mean is -0.5055***/*此行為log檔內的結果*/
跑出的結果會在log顯示,不使用%eval的原因跟小數點有關
當算平均的量大的時候,可以考慮使用%sysfunc來連結其他的函數一起應用
其中用來算平均的函數就是大家熟悉的SAS程式語言中mean函數
%let meanstat=%sysfunc(mean(&a,&b,&c,&d));/*4個macro變數以逗號區隔,記得加上&記號,用括號包夾完成*/
%put ***The mean is &meanstat***;
***The mean is -0.5055***/*此行為log檔內的結果*/
%sysfunc還可以與許多SAS的程式語言進行聯合運用
待讀者自行挖掘啦~
–
參考資料:SAS Macro Programming Made Easy, Second Edition

1月 9th, 2011 at 4:39 pm
這個的確是很討厭的東西…還要去區分浮點的問題…哈
謝謝分享
上次給你的東西有用嗎?
1月 9th, 2011 at 7:18 pm
回carl大老師, 非常感謝您的協助,
內容深入淺出, 淺顯易懂, 努力持續嗑ing…
非常感謝您!!!!!!!!!!