sas基礎語句總結

2021-09-24 18:52:56 字數 4343 閱讀 7111

一、基礎語句

1、系統環境設定(基礎的環境設定語句)

options nodate nonumber mprint source source2 sastrace=』,d』 sastraceloc=saslog replace obs=max ps=500 ls=200 nocenter yearcutoff=1950 mergenoby=error compress=yes nosymbolgen mlogic msglevel=i;

注意:1)當在使用merge語句的時候,如果兩個資料集有重複的列名,那麼後面列的資料會覆蓋前面列,使用msglevel=i語句能夠將此情況報告出來。

2、變數設定

%let pgm = startsaspgm; 為變數pgm賦值

%let time = 20200215; 為變數time賦值

%let path = /sas/learning/pgm; 為變數path賦值,可以用在後面libname語句中

%let today = %sysfunc(today(),yymmddn8.);將今天的日期賦值到變數today中

%global pgm; 全域性變數

%local pgm; 區域性變數

%let j = eval(&j. + 1); 變數加法

另一種賦值法:proc sql

proc sql noprint;select count(distinct number) into:cnt from test1;quit;

%let xx= %left(&cnt.); 將數字變為左邊,就可以做到下面給多個變數賦值

proc sql noprint;select count(distinct number) into:cnt1-:cnt&xx. from test1;quit;

多個變數引用的時候,要加&,如:&cnt1. 和 &&cnt&xx. 前面有兩個&,因為同時引用了xx,所以是兩次引用要用兩個&

第三種賦值法:call symput

data null;

call symput(『startdate』,put(intnx(『day』,"&today."d,-1),date9.));給startdate賦值

run;

3、指定資料庫

libname testdb " /sas/learning/pgm" access=readonly; 將指定資料夾命名為testdb,就可以使用了

libname testdb 「&path.」 access=readonly; 用變數來指定

4、呼叫程式

%include 「/sas/learning/pgm/pgm.sas」;指定程式

%checksas();呼叫程式内巨集

5、其它

1)檢查檔案是否存在

%let exist = %sysfunc(fileexist(「xx/xx/xx.sas」)); 檢查某sas程式是否存在

2)檢查字元

%sysfunc(prxmatch(/[^a-z_\d]/i,&datasetname.));檢查資料集名中是否包含字元

3)列表拆開

如果乙個列表中有多個物件,用逗號隔開,如dsn_list = test1,test2,想拆開單獨賦值

%let dsn = %nrbquote(%scan(&dsn_list,&j,%str(,)));其中&j是指標,指代位置,如1代表test1,2代表test2,3則為空;另外nrbquote會將特殊字元當做正常字元賦值給dsn,以免報錯;scan (s,n<,list-of-delimiters>) 空格和引數指定的分隔符同作為分隔符判斷單詞

4)輸出文字時候,error為關鍵字,所以要拆開用cats合併來輸出(cats會去掉空格)

%put %sysfunc(cats(err,or)):invalid datase name.

5)共享結果許可權,後面是專案所在資料夾,一般放在程式最後,向所有人共享所有內容許可權

x 『chmod -rf 770 /sas/project/test』;

二、巨集程式

1、巨集程式示例

%macro checksas(num=);

%do i = 1 to &num.; 系統命令前都要加%百分號

%put &i.;

%if &i. = 3 %then %do;

%put it is time to go &i.;

%goto endmacro; 跳到endmacro所在位置

%end;

% else %do;

%put it is not the time &i.;

%end;

%do %while(&i. < 10);

%put now is &i.;

%end;

%if &i. = 20 %then %do;

%put it is the maximum &i.;

%abort cancel; 直接結束巨集程式

%end;

%endmacro:;有冒號

% end; 每個%do都要有乙個%end

%mend;

2.用goto跳出迴圈,同%abort cancel終止迴圈

三、讀取excel

options validvarname=v7; 使用excel的列名作為資料集列名

proc import out = input_data

datafile = 「/sas/learning/pgm/hello.xlsx」

dbms=xlsx replace;

getnames=yes;

sheet=「sheet1」;

run;

四、日期相關

%let today = %sysfunc(today(),date9.); 各式不同應用不同

%let today = %sysfunc(today(),yymmddn8.);

data null;call symput(『startdate』,put(intnx(『day』,"&today.「d,-1),date9.));run;計算日期後賦值給startdate

在引用日期時候,要用雙引號,後面加d,否則無效:」&today."d

五、sql相關

1、union會去重,union all不去重

proc sql;

select * from table1

union all

select * from table2;

quit;

2、cross join笛卡爾積

六、sas函式

1、sort排序函式,可以排序也可以去除重複值

proc sort data=test1;by cust;run;給test1排序,按cust公升序排

proc sort data=test1 out=test2 nodupkey;by all;run;基於所有列進行去重,結果輸出到test2

2、transpose轉置,使用轉置前要sort排序

如下,希望按照每個cust的列list1到list100進行轉置,結果為2列,cust和col1(系統預設)

proc sort data=test1;by cust;run;先按cust排序

proc transpose data=target out=target1(keep=cust col1);這裡設定結果只保留cust和col1

by cust; 按每個cust

var list1-list100; 想要轉置的目標列

run;

七、data步相關

1、data步計算日期前先定義各式,合併資料集時候也需要

data test1;

format day1 date9.;

format day2 date9;

set test;

day1 = today + number1;

day2 = today - number2;

if day1 > "&startday."d;對每個觀察值進行判斷,只有滿足if條件的才會輸出

run;

2、若想選擇資料集中每組的最後乙個,先對資料集排序

proc sort data=test;by cust;run;按cust排序

data test1;

set test;

by cust;確定分組所依賴的列

if last.cust then output;每組最後乙個輸出,如果要第乙個則用first

run;

3、資料集合並時候可能會遇到列長度不一致的問題,需要先format,但是會出warning,可以改用sql的union all

data test_new;

format cust_type $20.;

set test1

test2;

run;

SAS自學系列 SAS語句的語法

sas是現今非常流行的資料分析和資料探勘軟體,想從事資料分析行業,掌握sas很有必要。雖然sas本身提供了豐富的人機互動介面,通過手動呼叫各個menu能方便地完成資料統計分析的任務,但是,通過 來呼叫各個功能模組無疑能為工作帶來巨大的靈活性,並顯著提高效率。本文主要是根據網上找到的乙個電子文件 sa...

SAS中的if過濾語句

在sas中,if語句和where語句都有過濾作用,請看如下兩端 其效果是相同的 data a set sashelp.class if eq 男 run data a set sashelp.class where eq 男 run if 過濾語句的基本語法為 if 條件 其完整形式應該是 if 條...

SAS學習 Base SAS基礎

1 sas軟體啟動 windows環境下雙擊.exe檔案啟動。在windows環境下的示例 c c program files sashome sasfoundation 9.4 sas.exe sysin c sas code test.sas log c sas logs test.log pr...