[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

Share


2 Responses to “[SAS] 使用%SYSFUNC操作macro變數值計算平均”

  1.   carl Says:

    這個的確是很討厭的東西…還要去區分浮點的問題…哈
    謝謝分享

    上次給你的東西有用嗎?

  2.   Shrimp Li Says:

    回carl大老師, 非常感謝您的協助,
    內容深入淺出, 淺顯易懂, 努力持續嗑ing…

    非常感謝您!!!!!!!!!!

留言回覆

CAPTCHA 驗證圖片 CAPTCHA Audio
更換一張圖片

Since 2010 total of 463303 visits