SAS學習筆記 高階程式設計

2021-10-05 22:14:40 字數 3528 閱讀 7630

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 ...