SAS中的SQL語句完全教程_第1頁
SAS中的SQL語句完全教程_第2頁
SAS中的SQL語句完全教程_第3頁
SAS中的SQL語句完全教程_第4頁
SAS中的SQL語句完全教程_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SAS中的SQL語句完全教程之一:SQL簡介與根本查詢功能(2023-04-1409:10:39)轉載標簽:

sas

sql

查詢

教育分類:

SQLSAS中的SQL語句完全教程之一:SQL簡介與根本查詢功能本系列全部內容主要以《SQLProcessingwiththeSASSystem(CourseNotes)》為主進行講解,本書是在網上下載下來的,但忘了是在哪個網上下的,故不能提供下載鏈接了,需要的話可以發郵件向我索取,我定期郵給大家,最后聲明一下所有資料僅用于學習,不得用于商業目的,否那么后果自負。轉載請注明出處:1SQL過程步介紹1.1SQL過程步可以實現以下功能:查詢SAS數據集、從SAS數據集中生成報表、以不同方式實現數據集合并、創立或刪除SAS數據集、視圖、索引等、更新已存在的數據集、使得SAS系統可以使用SQL語句、可以和SAS的數據步進行替換使用。注意,SQL過程步并不是用來代替SAS數據步,也不是一個客戶化的報表工具,而是數據處理用到的查詢工具。1.2SQL過程步的特征SQL過程步并不需要對每一個查詢進行重復、每條語句都是單獨處理、不需要print過程步就能打印出查詢結果、也不用sort過程步進行排序、不需要run、要quit來結束SQL過程步1.3SQL過程步語句SELECT:查詢數據表中的數據ALTER:增加、刪除或修改數據表的列CREATE:創立一個數據表DELETE:刪除數據表中的列DESCRIBE:列出數據表的屬性DROP:刪除數據表、視圖或索引INSERT:對數據表插入數據RESET:沒用過,不知道什么意思SELECT:選擇列進行打印UPDATE:對已存在的數據集的列的值進行修改2SQL根本查詢功能2.1SELECT語句根本語法介紹SELECT<DISTINCT>object-item<,...object-item>

FROMfrom-list

<WHEREsql-expression>

<GROUPBYgroup-by-item<,...group-by-item>>

<HAVINGsql-expression>

<ORDERBYorder-by-item<,...order-by-item>>;

這里SELECT:指定被選擇的列FROM:指定被查詢的表名WHERE:子數據集的條件GROUPBY:將數據集通過group進行分類HAVING:根據GROUPBY的變量得到數據子集ORDERBY:對數據集進行排序2.2SELECT語句的特征選擇滿足條件的數據、數據分組、對數據進行排序、對數據指定格式、一次最多查詢32個表。這里還要提到的就是,在SAS系統中,對于表名和變量名一般不超過32個字符,對于庫名,文件引用名,格式等不能超過8個字符2.3Validate關鍵字Validate關鍵字只存在于select語句中、可以在不運行查詢的情況下測試語句的語法、檢查列名是否合法、對于不正確的查詢將打印其消息。例:1

procsql;2

validate3

selectRegion,Product,Sales4

fromsashelp.shoes5

whereRegion='Africa';NOTE:PROCSQL語句有有效語法。6

quit;此外,我們還可以用noexec選項也可以用來進行語法測試。例:7

procsqlnoexec;8

selectRegion,Product,Sales9

fromsashelp.shoes10

whereRegion='Africa';NOTE:由于NOEXEC選項,未執行語句。11

quit;這里提示未執行,未提示錯誤,說明該語句沒有語法錯誤。但是如果參加一個sashelp.shoes表里沒有字段,這里就會出現錯誤,例:12

procsqlnoexec;13

selectRegion,Product,Sales,test14

fromsashelp.shoes15

whereRegion='Africa';ERROR:以下這些列在起作用的表中沒有找到:test.16

quit;2.4查詢列我們可以像2.3那樣查詢指定列,也可以用*來查詢所有列。例:procsql;select*fromsashelp.shoes;quit;這里我們可以用feedback選項來查看到底我們選擇了哪些列:17

procsqlfeedback;18

select*19

fromsashelp.shoes;NOTE:Statementtransformsto:selectSHOES.Region,SHOES.Product,SHOES.Subsidiary,SHOES.Stores,SHOES.Sales,SHOES.Inventory,SHOES.ReturnsfromSASHELP.SHOES;20

quit;這時,我們可以看到從sashelp.shoes表中選擇了8個列2.5消除重復值我們可以用distinct選項來消除重復值。例如,我們要得到沒有重復的所有地區的名稱:procsql;selectdistinctRegionfromsashelp.shoesquit;2.6where子集查詢2.6.1比擬運算符先列出where語句用到的比擬運算符:LT

<

小于GT

>

大于EQ

=

等于LE

<=

小于或等于GE

>=

大于或等于NE

^=

不等于例如,我們要查詢sales大于100000的所有數據:procsql;select*fromsashelp.shoeswheresales>100000;quit;2.6.2in:只要滿足in里的任意一個值,表達式即為真,例如,我們要選擇Region在Africa和EasternEurope的所有數據:procsql;select*fromsashelp.shoeswhereRegionin('Africa','EasternEurope');quit;2.6.3邏輯運算符OR

|

或AND

&

是NOT

^

非例如,選擇Region在Africa和EasternEurope,且銷售額大于100000的所有數據:procsql;select*fromsashelp.shoeswhereRegionin('Africa','EasternEurope')and

sales>100000;quit;2.6.4CONTAINS或?:判斷某列是否包含指定字符串例如,選擇列Region包含’Afr’的數據:procsql;select*fromsashelp.shoeswhereRegion?'Afr';quit;2.6.5ISNULL或ISMISSING:判斷某列數據是否為空例如,如果找出Region為空的數據:procsql;select*fromsashelp.shoeswhereRegionismissing;quit;注意,這里我們還可以用以下表達式對where語句進行替換。如果region為數值型變量,那么可以用region=.,如果region為字符型變量,那么可以用region=‘’進行替換。2.6.6Betweenand:選擇某一區間的數據例如選擇sales大于100000,但小于200000的所有數據:procsql;select*fromsashelp.shoeswheresalesbetween100000and200000;quit;2.6.7like:判斷是否能匹配某些字符例如,選擇以region以A開頭的所有地區procsql;select*fromsashelp.shoeswhereRegionlike'A%';quit;這里注意有兩類通配符,‘%’可以通配任意個任意字符,‘_’只能通配一個任意字符2.6.8=*:類似匹配這里由于sashelp.shoes里沒有符合要求的數據,所有就用書上的例子說明一下吧:Wherelastname=*‘smith’,出來的結果可能是:smith,smythe等2.7表達式我們可以通過已有的列進行計算來得到新的列,這時用關鍵詞as來給新的列賦列名,例如:procsql;selectRegion,Product,Sales,Stores,Sales/Storesassalesperstoresfromsashelp.shoesquit;這時結果就會多一列salesperstores,用來得到該地區該產品每個商店的平均銷售量。這里要注意的是,在創立表達式時,我們還可以在SQL里用到SAS中的除LAG和DIFF之外的所有函數。這里我們還可以用表達式計算出來的結果來進行子集查詢,但一定要記住用calculated關鍵詞。例如我們要找出商店平均銷售量大于5000的數據:方法一:procsql;selectRegion,Product,Sales,Stores,Sales/Storesassalesperstoresfromsashelp.shoeswhereSales/Stores>5000;quit;方法二:procsql;selectRegion,Product,Sales,Stores,Sales/Storesassalesperstoresfromsashelp.shoeswherecalculatedsalesperstores>5000;quit;2.8查詢結果展示2.8.1orderby數據排序默認的排序方式是升序,我們可以用DESC關鍵詞來進行降序排列。例如以sales降序排列數據:procsql;select*fromsashelp.shoesorderbySalesDESC;quit;這里提示一下,我們可以用任意多列進行排序,包括表達式結果〔不用calculated〕,但最好是選擇的列。2.8.2LABEL與FORMATLABEL:改變輸出變量名的內容FORMAT:改變列的值的輸出方式例如,改變salesperstores的label和formatprocsql;selectRegion,Product,Sales,Stores,Sales/Storesassalesperstoreslabel='salesperstores'format=dollar12.2fromsashelp.shoes;quit;2.9處理SQL常用函數MEAN或AVG:均值COUNT或N或FREQ:非缺失值個數MAX:最大值MIN:最小值NMISS:缺失值個數STD:標準差SUM:求和VAR:方差2.9.1求和sumprocsql;selectRegion,Product,Sales,Stores,sum(Sales,Inventory,Returns)astotalfromsashelp.shoes;quit;2.9.2求均值avgprocsql;selectRegion,Product,Sales,Stores,avg(Sales)assalesavgfromsashelp.shoes;quit;2.9.3分組求均值groupbyprocsql;selectRegion,avg(Sales)assalesavgfromsashelp.shoesgroupbyRegion;quit;2.9.4計數countprocsql;selectRegion,count(*)ascountfromsashelp.shoesgroupbyRegion;quit;2.9.5HAVING數據子集procsql;selectRegion,count(*)ascountfromsashelp.shoesgroupbyRegionhavingcount(*)>50;quit;其它的就不多作介紹了,多用用就熟悉了2.10子查詢2.10.1找出regions平均sales大于全部平均sales的regionprocsql;selectRegion,avg(Sales)assalesavgfromsashelp.shoesgroupbyRegionhavingavg(Sales)>(selectavg(Sales)fromsashelp.shoes);quit;2.10.2ANY關鍵詞介紹>ANY(20,30,40)

最終效果:>20<ANY(20,30,40)

最終效果:<40=ANY(20,30,40)

最終效果:=20or=30or=40例如,選擇出region為unitedstate的sales小于任意region為africa的sales的數據procsql;selectRegion,Salesfromsashelp.shoeswhereRegion='UnitedStates'andSales<any(selectSalesfromsashelp.shoeswhereRegion='Africa');quit;這個例子沒有多少意義,只是說明一下any的用法2.10.3ALL關鍵詞介紹>ALL(20,30,40)

最終效果:>40<ALL(20,30,40)

最終效果:<20例如,選擇出region為unitedstate的sales小于所有region為africa的sales的數據procsql;selectRegion,Salesfromsashelp.shoeswhereRegion='UnitedStates'andSales<all(selectSalesfromsashelp.shoeswhereRegion='Africa');quit;2.10.4EXISTS與NOTEXISTSprocsql;select*fromsashelp.shoeswhere

exists(select*fromsashelp.orsales);quit;SAS中的SQL語句完全教程之二:數據合并與建表、建視圖(2023-04-1709:19:31)轉載標簽:

sas

sql

教育分類:

SQLSAS中的SQL語句完全教程之二:數據合并與建表、建視圖索引等本系列全部內容主要以《SQLProcessingwiththeSASSystem(CourseNotes)》為主進行講解,本書是在網上下載下來的,但忘了是在哪個網上下的,故不能提供下載鏈接了,需要的話可以發郵件向我索取,我定期郵給大家,最后聲明一下所有資料僅用于學習,不得用于商業目的,否那么后果自負。轉載請注明出處:1連接joins分為內連接innerjoins和外連接outerjoins內連接:僅返回匹配的數據,最多可以有32個表同時進行內連接外連接:返回所有匹配的數據和非匹配的數據,一次只能有兩個表或視圖進行外連接迪卡爾積:返回表內所有可能的匹配情況。例如表A有10*20的數據,表B有30*40的數據,那么兩個表的迪卡爾積有〔10+30〕*〔20+40〕=40*60的數據我們先建立兩個數據集:datamarch;inputflight$3.+5datedate7.+3departtime5.+2orig$3.+3dest$3.

+7miles+6boarded+6capacity;formatdatedate7.departtime5.;informatdatedate7.departtime5.;cards;219

01MAR94

9:31

LGA

LON

3442

198

250622

01MAR94

12:19

LGA

FRA

3857

207

250132

01MAR94

15:35

LGA

YYZ

366

115

178271

01MAR94

13:17

LGA

PAR

3635

138

250302

01MAR94

20:22

LGA

WAS

229

105

180114

02MAR94

7:10

LGA

LAX

2475

119

210202

02MAR94

10:43

LGA

ORD

740

120

210219

02MAR94

9:31

LGA

LON

3442

147

250132

02MAR94

15:35

LGA

YYZ

366

106

178202

03MAR94

10:43

LGA

ORD

740

118

210219

03MAR94

9:31

LGA

LON

3442

197

250622

03MAR94

12:19

LGA

FRA

3857

180

250271

03MAR94

13:17

LGA

PAR

3635

147

250202

04MAR94

10:43

LGA

ORD

740

148

210219

04MAR94

9:31

LGA

LON

3442

232

250622

04MAR94

12:19

LGA

FRA

3857

137

250132

04MAR94

15:35

LGA

YYZ

366

117

178271

04MAR94

13:17

LGA

PAR

3635

146

250302

04MAR94

20:22

LGA

WAS

229

115

180114

05MAR94

7:10

LGA

LAX

2475

117

210202

05MAR94

10:43

LGA

ORD

740

104

210219

05MAR94

9:31

LGA

LON

3442

160

250622

05MAR94

12:19

LGA

FRA

3857

185

250132

05MAR94

15:35

LGA

YYZ

366

157

178271

05MAR94

13:17

LGA

PAR

3635

177

250114

06MAR94

7:10

LGA

LAX

2475

128

210202

06MAR94

10:43

LGA

ORD

740

115

210219

06MAR94

9:31

LGA

LON

3442

163

250132

06MAR94

15:35

LGA

YYZ

366

150

178302

06MAR94

20:22

LGA

WAS

229

66

180114

07MAR94

7:10

LGA

LAX

2475

160

210132

07MAR94

15:35

LGA

YYZ

366

164

178271

07MAR94

13:17

LGA

PAR

3635

155

250302

07MAR94

20:22

LGA

WAS

229

135

180;run;datadelay;inputflight$3.+5datedate7.+2orig$3.+3dest$3.+3delaycat$15.+2destype$15.+8delay;informatdatedate7.;formatdatedate7.;cards;114

01MAR94

LGA

LAX

1-10Minutes

Domestic

8202

01MAR94

LGA

ORD

NoDelay

Domestic

-5622

01MAR94

LGA

FRA

NoDelay

International

-5132

01MAR94

LGA

YYZ

11+Minutes

International

14302

01MAR94

LGA

WAS

NoDelay

Domestic

-2114

02MAR94

LGA

LAX

NoDelay

Domestic

0202

02MAR94

LGA

ORD

1-10Minutes

Domestic

5219

02MAR94

LGA

LON

11+Minutes

International

18622

02MAR94

LGA

FRA

NoDelay

International

0132

02MAR94

LGA

YYZ

1-10Minutes

International

5271

02MAR94

LGA

PAR

1-10Minutes

International

4302

02MAR94

LGA

WAS

NoDelay

Domestic

0114

03MAR94

LGA

LAX

NoDelay

Domestic

-1202

03MAR94

LGA

ORD

NoDelay

Domestic

-1219

03MAR94

LGA

LON

1-10Minutes

International

4622

03MAR94

LGA

FRA

NoDelay

International

-2132

03MAR94

LGA

YYZ

1-10Minutes

International

6271

03MAR94

LGA

PAR

1-10Minutes

International

2302

03MAR94

LGA

WAS

1-10Minutes

Domestic

5114

05MAR94

LGA

LAX

NoDelay

Domestic

-2202

06MAR94

LGA

ORD

NoDelay

Domestic

-3219

06MAR94

LGA

LON

11+Minutes

International

27132

06MAR94

LGA

YYZ

1-10Minutes

International

7302

06MAR94

LGA

WAS

1-10Minutes

Domestic

1622

07MAR94

LGA

FRA

11+Minutes

International

21132

07MAR94

LGA

YYZ

NoDelay

International

-2271

07MAR94

LGA

PAR

1-10Minutes

International

4302

07MAR94

LGA

WAS

NoDelay

Domestic

0;run;1.1內連接procsql;createtableinnerjoinsasselecta.*,b.*fromMarcha,Delaybwherea.flight=b.flightanda.date=b.date;quit;1.2外連接1.2.1左連接leftjoinprocsql;createtableleftjoinsasselect*fromMarchaleftjoinDelaybona.flight=b.flightanda.date=b.date;quit;1.2.2右連接rightjoinprocsql;createtablerightjoinsasselect*fromMarcharightjoinDelaybona.flight=b.flightanda.date=b.date;quit;1.2.3全連接fulljoinprocsql;createtablefulljoinsasselect*fromMarchafulljoinDelaybona.flight=b.flightanda.date=b.date;quit;1.3迪卡爾積procsql;createtablecartesianasselecta.*,b.*fromMarcha,Delayb;quit;這里再大概說明一下內外連接的實現的根本原理:首先生成兩個數據表的迪卡爾積,然后再根據where語句來選擇符合條件的數據作為輸出結果。當然,在實際處理過程中,SQL過程步會對這個迪卡爾積的數據集進行優化,將其劃分成小塊數據進行處理。2復雜的連接這里因為找不到很好的例子來說明如何處理復雜的連接,因此就不講解了,大概說一下思路吧:簡單地說,對于復雜的查詢,我們應該將該查詢分解成幾個小的子查詢,然后對每個子查詢的結果進行測試,最后將所有的子查詢結合起來就組成了這個復雜的查詢。這樣會比一來就寫復雜的查詢容易得多。3數據集SET操作這里有四類SET操作,分別是EXCEPT、INTERSECT、UNION、OUTERUNION。EXCEPT:得到除第二個數據集以外的所有第一個數據集里的數據INTERSECT:得到第一個數據集和第二個數據集都有的數據UNION:得到兩個數據集所有的數據,這里如果兩個數據集有相同的數據,重復數據只出現一次OUTERUNION:得到兩個數據集所有的數據。還有兩個關鍵詞來修改SET操作的行為:ALL和CORRESPONDINGALL:并不刪除重復值,不能與OUTERUNION合用〔注意,用ALL關鍵詞,一種情況是你不管是否會有重復值,另一個情況是不可能出現重復值,例如有主鍵的數據〕CORRESPONDING:只保存兩個數據集都有的字段,一般簡寫為CORR3.1EXCEPT找出所有沒有延遲的航班和日期:procsql;selectflight,datefromMarchexceptselectflight,datefromDelay;quit;注意:這里重復值已經被刪除。如果要得到所有的包含重復值的數據,就要用到關鍵詞ALL:procsql;selectflight,datefromMarchexceptALLselectflight,datefromDelay;quit;如果只保存兩個數據集都有的字段,那么用到關鍵詞CORRESPONDING〔可簡寫為CORR〕:procsql;select*fromMarchexceptCORRselect*fromDelay;quit;3.2INTERSECT找出所有延遲的航班和日期:procsql;selectflight,datefromMarchINTERSECT

selectflight,datefromDelay;quit;關鍵詞ALL和CORRESPONDING與在EXCEPT中一樣,這里不再作介紹3.3UNION選擇所有的數據,這里的重復值只出現一次procsql;selectflight,datefromMarchUNION

selectflight,datefromDelay;quit;關鍵詞ALL和CORRESPONDING與在EXCEPT中一樣,這里不再作介紹3.4OUTERUNIONprocsql;selectflight,datefromMarchOUTERUNION

selectflight,datefromDelay;quit;這里,如果我們用到關鍵詞CORR,就可以將相同字段的數據結合到一起:procsql;select*fromMarchOUTERUNION

CORRselect*fromDelay;quit;4建表4.1建空表4.1.1通過指定變量建空表procsqlnoprint;createtablepercent

(varnamechar(30),Industrychar(4),begindatenumformatdate9.

label='thebeginningdate',enddatenumformatdate9.label='theendingdate',P_1num,P_5num,P_95num,P_99num);quit;4.1.2拷貝數據集來建空表procsqlnoprint;createtableDelaycopy(keep=flightdate)likeDelay;quit;4.1.3查詢語句中,用outobs選項來建空表procsqlnoprintoutobs=0;createtableflight114asselect*fromDelay;quit;4.2對數據表增加數據主要有三種方法:4.2.1SET語句procsqlnoprint;insertintoflight114setflight='302',date='07MAR94'd,orig='LGA',dest='WAS',delaycat='NoDelay',destype='Domestic',

delay=0;quit;4.2.2VALUES語句procsqlnoprint;insertintoflight114values('271','07MAR94'd,'LGA','PAR','1-10Minutes','International',4);quit;4.2.3條件查詢

:建表和導入數據同時完成procsqlnoprint;createtableflight114asselect*fromDelaywhereflight='114';quit;5完整性約束完整性約束的好處是保證SAS數據集的連續性和正確性,它在我們更新數據或插入新的數據時,驗證新的數據是否符合該變量的約束條件。完整性約束需要8.0以上版本,符合ANSI標準,可以在表建立時或表有數據后建立約束,但不能被用于視圖,也不能用于低于8.0版本的SAS系統建立的數據集。五大類完整性限制:NOTNULL、CHECK、UNIQUE、PRIMARYKEY、FOREIGNKEY。NOTNULL:不許出現缺失值CHECK:指定該變量可以輸入哪些值UNIQUE:每個值必須是唯一的,其值可以為空,但只能有一個值為空PRIMARYKEY:主鍵,每個值必須是唯一且非空的FOREIGNKEY:其它表的主鍵,即外鍵,其值為關聯表的主鍵的值且非空5.1check例:procsqlnoprint;createtablepercent(varnamechar(30),Industrychar(4),begindatenumformatdate9.

label='thebeginningdate',enddatenumformatdate9.label='theendingdate',percentnum,CONSTRAINTpercent_checkcheck(percentle1.0));quit;這時,如果我們插入的數據中,percent>1的話,將會出現錯誤。5.2回滾ROLLBACKS當我們用INSERT或UPDATE的時候,操作要等到發生錯誤的時候才會停止,這時會出現一個問題,就是數據表的一些數據更新了,而另一些數據沒更新,這時如果我們要回到原來的狀態,就需要用到UNDO_POLICY選項進行回滾。UNDO_POLICY有三個選項:REQUIRED:缺省選項,取消所有的更新或新插入的數據。這里要注意的是,此操作不一定完全能成功。NONE:阻止所有的與約束不符的更新或新數據OPTOINAL:取消所有可以成功取消的更新或新插入的數據本功能用得很少,所以只是翻譯一下,請大家查閱相關文獻。6創立視圖與索引6.1視圖視圖最大的好處是它只是一個存儲的查詢,因此不包含任何數據,這可以減少磁盤的使用空間。其它的功能與數據庫的表類似。創立視圖語法:CreateViewView-nameas

Query-expression

;例:procsqlnoprintoutobs=0;createView

delayviewasselect*fromDelay;quit;6.2索引語法:Create<unique>Indexindex-nameOntable-name(column-name,column-name);視圖和索引都用得很少,所以這里就不作講解了,大家查閱相關文獻吧。7維護表這里主要講一下如何更新或刪除已存在的表的數據,如何對一個表增加、減少、或改變其列的屬性,如何刪除表、視圖和索引。7.1更新數據這里主要用update來更新表的數據,語法如下Updatetable-nameSetcolumn-name=expression,Setcolumn-name=expression,…Whereexpression;注意,這里的where一定要寫清楚,如果沒有的話,那么會更新所有的數據。例:procsqlnoprint;updatedelaysetdelaycat='Delay'where

delay=0;quit;7.2條件處理用CASE語句來實現條件處理。例如,對SASHELP.shoes根據sales的大小進行分類:語法:Selectcolumn…Case<case-operand>Whenwhen-conditionthenresult-expression<Whenwhen-conditionthenresult-expression><elseresult-expression>End;例:procsql;createtableshoesrankasselect*,(casewhensales>100000then'good'else'bad'end)asrankfromsashelp.shoes;quit;7.3刪除行語法:Deletefromtable-nameWhereexpression;例:procsql;DeletefromshoesrankWhereRegion='Africa';quit;7.4改變列語法:AlterTabletable-nameAddcolumn-definition,column-definition,…Dropcolumn-name,column-name,…Modifycolumn-definition,column-definition,…對已存在的數據表增加一個列:例:procsql;altertableshoesrankaddaddcolumnnumformat=comma10.2,addcolumnmorechar(10);quit;從已存在的數據表中刪除列,例:procsql;altertableshoesrankdropaddcolumn;quit;修改某列的屬性,例:procsql;altertableshoesrankmodify

addcolumnmorechar(20)label='modifyaddlabel';quit;7.5刪除表、視圖、索引語法:DropTabletable-name,table-name,…;DropViewView-name,View-name,…;DropIndexindex-name,index-name,…;Fromtable-name;例:procsql;droptableshoesrank;quit;SAS中的SQL語句完全教程之三:SQL過程步的其它特征(2023-04-2009:25:20)轉載標簽:

sas

sql

教育分類:

SQLSAS中的SQL語句完全教程之三:SQL過程步的其它特征本系列全部內容主要以《SQLProcessingwiththeSASSystem(CourseNotes)》為主進行講解,本書是在網上下載下來的,但忘了是在哪個網上下的,故不能提供下載鏈接了,需要的話可以發郵件向我索取,我定期郵給大家,最后聲明一下所有資料僅用于學習,不得用于商業目的,否那么后果自負。轉載請注明出處:前面兩局部內容都比擬簡單,本節內容才是本系列要介紹的重點。不過這里裝的內容都是點到即止,如果以后有時間,會進行更詳細地講解。1SQL過程步選項SQL過程步選項的作用主要是可以從更細節的方式去控制SQL過程步,并且可以在不執行過程的情況下對程序進行測試等。下面介紹一以下出來的選項,這些選項大多經常用到,更多的選項可以參考SAS幫助。INOBS:進行一個查詢時,對每個源數據表進行N行限制,僅對這N行的數據進行查詢。OUTOBS:指定查詢輸出結果的觀測數LOOPS:指定SQL過程步內循環的次數〔此選項我用得比擬少,誰明白的可以講一下,多謝〕NOPROMPT和PROMPT:修改上述三個選項的效果,從而讓你選擇是否繼續或停止選項的效果。PRINT和NOPRINT:控制是否打印選擇的數據結果NONUMBER和NUMBER:控制是否在第一列打印觀測值編號DOUBLE和NOBOUBLE:輸入報表是否隔行顯示NOFLOW和FLOW和FLOW=n和FLOW=nm

:指定列寬,n指定列寬,m指定行寬???1.1double選項procsqldouble;selectflight,datefromMarchUNION

selectflight,datefromDelay;quit;1.2inobs選項注意:這里inobs選項只讀取每個源表前10條數據進行后續的操作,如下面的日志所示。兩個表都只讀取10條數據進行關聯,最后得到7條關聯好的數據。237

procsqlinobs=10;238

createtabletmpas239

selecta.*,b.*240

fromMarcha,Delayb241

wherea.flight=b.flightanda.date=b.date;WARNING:變量“flight〞已經存在于文件WORK.TMP中。WARNING:變量“date〞已經存在于文件WORK.TMP中。WARNING:變量“orig〞已經存在于文件WORK.TMP中。WARNING:變量“dest〞已經存在于文件WORK.TMP中。WARNING:Only10recordswerereadfromWORK.DELAY〔別名=B〕由于INOBS=選項。WARNING:Only10recordswerereadfromWORK.MARCH〔別名=A〕由于INOBS=選項。NOTE:表WORK.TMP創立完成,有7行,11列。1.3outobs選項這個選項的功能與inobs相似,不同的是,這個選項指定結果的觀測值數量,而不是讀取源表的數量,這在我們控制輸出結果的數據量時非常有用。243

procsqloutobs=10;244

createtabletmp1as245

selecta.*,b.*246

fromMarcha,Delayb247

wherea.flight=b.flightanda.date=b.date;WARNING:變量“flight〞已經存在于文件WORK.TMP1中。WARNING:變量“date〞已經存在于文件WORK.TMP1中。WARNING:變量“orig〞已經存在于文件WORK.TMP1中。WARNING:變量“dest〞已經存在于文件WORK.TMP1中。WARNING:語句由于OUTOBS=10選項而過早終止。NOTE:表WORK.TMP1創立完成,有10行,11列。1.4prompt選項這里prompt選項,可以讓你選擇是否還是按照原來的設置進行動作,或者繼續操作。如下面的日志所以,如果直接選擇停止,那么得到1.2的結果,如果一直按繼續,那么得到如下結果:255

procsqlinobs=10prompt;256

createtabletmp3as257

selecta.*,b.*258

fromMarcha,Delayb259

wherea.flight=b.flightanda.date=b.date;WARNING:變量“flight〞已經存在于文件WORK.TMP3中。WARNING:變量“date〞已經存在于文件WORK.TMP3中。WARNING:變量“orig〞已經存在于文件WORK.TMP3中。WARNING:變量“dest〞已經存在于文件WORK.TMP3中。NOTE:表WORK.TMP3創立完成,有19行,11列。1.5number選項procsqloutobs=4number;select*fromMarch;quit;1.6reset選項對上述SQL語句加上reset選項,使其不輸出序號procsqloutobs=4number;resetnonumber;select*fromMarch;quit;2DICTIONARY2.1DICTIONARY介紹DICTIONARY可以得到很多SAS文件和會話等很多的元數據,包括SAS文件,外部文件,系統選項、宏、標題、腳注等。DICTIONARY是在初始化時就創立,自動更新,并只允許讀取操作,故不能修改。下面列舉一下SAS中DICTIONARY所包含的表:SASV8DICTIONARY所包含的表:CATALOGS:SAS目錄的信息COLUMNS:SAS變量和列的信息

EXTFILES:外部數據信息INDEXES:參與索引的列的信息

MACROS:宏相關信息MEMBERS:所有數據類型〔表、視圖、目錄等〕的信息

OPTIONS:當前會話選項STYLES:ODS的樣式信息TABLES:表和數據集信息TITLES:標題和腳注信息VIEWS:視圖信息SASV9DICTIONARY所包含的新的表:CHECK_CONSTRAINTS:CHECK約束信息CONSTRAINT_COLUMN_USAGE:約束列使用信息CONSTRAINT_TABLE_USAGE:約束表使用DICTIONARIES:DICTIONARY所有表及其列ENGINES:可用的引擎FORMATS:可用的格式GOPTIONS:SAS/GRAPH選項LIBNAMES:LIBNAME信息REFERENTIAL_CONSTRAINTS:相關約束REMEMBER:已記錄的信息TABLE_CONSTRAINTS:表約束2.2查看2.1中各表內容查看各表的結構,以查看dictionary.tables為例:procsql;describetabledictionary.tables;quit;這里可以從日志里看到表dictionary.tables的結構。要查看這個表的數據,可以通過以下語句實現,這里我們只輸出前10條數據procsqloutobs=10;select*fromdictionary.tables;quit;2.3使用DICTIONARY的信息查看SASHELP庫里的文件信息:procsql;optionsnolabelnocenter;selectmemname,nobs,nvar,crdatefromdictionary.tableswherelibname='SASHELP';quit;注意,這里的庫名都是大寫。查看SASHELP庫里有列名為tabname的所有表:procsql;opti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論