sas**與python, matlab有很大的區別,如變數的引用、漢字的解析等等,是完全不同的一種語言。
這裡的記錄不是教程型,更多的可能算是小tip
/*學習材料是醫學統計學專業的課件,但我是資料分析人員,所以這裡暫且忽略各種假設檢驗等*/
/*記錄形式大多為**段+解釋*/
/*判斷使用者指定的資料夾路徑是否存在*/
%macro validationdrath(programedir=)/secure store des='驗證資訊-檔案路徑';
%let rc=%sysfunc(fileexist(%str(&programedir.)));
%if &rc. ne 1 %then %do;
%put %str(waring:資料夾路徑錯誤![&programedir.]不存在);
%abort;
%end;
%else %do;
%put %str(路徑正確!);
%end;
%mend;
%validationdrath(programedir=c:\書稿\);
上面的**段可能一般人不會用到,我也不會用到。不過可以用來學習一下:
1. 巨集變數、巨集的名稱只能是下劃線、字母、數字構成
2. 引用巨集變數格式:&var. 注意.不能漏
3. 關鍵字前要加%,如%if等,執行巨集也要加%
4. %let是用來賦值的,格式為%let var1=1;
5. %put是將巨集變數輸出到日誌中
6. %str()函式裡的漢字不需要用""引起來
目的:將資料集中的資訊(資料)賦值給巨集變數
proc sql;
select j2 into: curvalue from t2
where compress(j2)="one";
%put &curvalue.;
select j2 into: valuelist separated by "," from t2;
%put &valuelist.;
quit;
兩個select,效果不同:
curvalue中儲存的懷疑是乙個字串,而valuelist懷疑還是字串只不過用逗號隔開了。【應該不是類似list的格式】(如果後續學習確認了是什麼型別會改過來的)
日誌如下:
作用:將資料集中的值賦給巨集變數
data _null_;
x = 100;
call symput('xvalue', x); /*將x裡的值賦給巨集變數xvalue*/
run;
%put &xvalue.; /*注意巨集變數末尾的.一定不能漏哦*/
定義方法:
%macro test();
%local local_i;
%global global_i;
%let local_i = 1000;
%let global_i = 1000;
%mend;
%test();
%put local_i = &local_i. global_i = &global_i.;
日誌輸出:
%symexist(x); /*判斷x是否為巨集變數,是返回1,否返回0*/
%symglobl(x); /*判斷x是否為全域性巨集變數,是返回1,否返回0*/
%symlocal(x); /*判斷x是否為區域性巨集變數,是返回1,否返回0*/
%datatyp(&x.); /*判斷x的型別,數值型返回numeric,字元型返回char*/
%macro macroname()/des='***';
(more sas codes)
%mend;
示例:
/*求1-100, 500-555, 700-1000的總和。要求結果存在全域性變數sum中*/
%macro sum(start=, end=)/des='求和巨集';
%global sum;
%let sum=;
%local i;
%do i=&start. %to &end.;
%let sum = %eval(&sum. + i);
%end;
%put &sum.;
%mend;
%sum(start=100, end=1000);
/*另一種寫法,不用全域性變數*/
%macro sum(start=, end=)/des='求和巨集';
%local sum;
%local i;
%do i=&start. %to &end.;
%let sum = %eval(&sum. + i);
%end;
%put &sum.;
%mend;
options notes=0 source=0 source2=0 nodate nonumber;
大規模運算時,顯著提高運算速度!!!
libname cpmacro "g:\統計分析報告程式\compiledmacro";
options mstored sasmstore=cpmacro mcompile;
put(mean1, 9.2); /*mean1保留2位小數*/
compress(put(mean1, 0.2) || "+-" || put(stddev1, 9.2)); /*拼接成字串*/
keep class n mean_sd min max; /*保留這些變數*/
if _n_=3 then delete; /*刪除滿足條件的行*/
/*---------------------------其他補充工作---------------------------*/
/*刪除臨時資料集*/
proc datasets nowarn nolist;
delete _:;
run;
quit;
ods listing;
/*是否列印結果*/
%if %upcase(&printyes.)=y %then %do; /*%upcase函式將字串轉成大寫*/
proc print data=&outds. noobs label;
run;
%end;
SAS學習筆記
專案需要,最近研究sas,來完成專案中的評估等功能,小小心得。之前的專案圖示都是用弼傑來完成的,可乙個功能完成不了,所以引入了sas,看了下sas環境裡面自帶的圖形例項,確實很強大,而且安裝sas步驟繁複,需要小心再小心。今天在寫sas 的時候發現了乙個奇怪的現象,sas和oracle有些標示符是通...
SAS學習筆記(一)
概念的理解 1.邏輯庫 由一組sas檔案組成,即類似乙個儲物箱,包括臨時庫和永久庫。1 臨時庫 啟動時存在,關了就刪除了 2 永久庫 關了sas也還是存在 2.資料集 由描述資訊和資料值組成,包括sas資料檔案和sas資料檢視 1 資料檔案 同時描述資訊和儲存資料值 2 資料檢視 是乙個查詢語句,我...
SAS學習筆記(二)
翻譯與總結自 html 1.nodupkey會把同by variable裡變數有相同值的observation都刪掉。這些observation包括那些與by variable裡變數有相同值,但與剩下變數有不同值的observation。如,input id1 id2 extra cards aa ...