SAS數(shù)據(jù)指針和PDV流程
理解DATA步的數(shù)據(jù)指針和PDV流程至關(guān)重要。它能幫助我們摸清DATA步中的所有執(zhí)行語(yǔ)句是如何在緩存區(qū),內(nèi)存以及I/O系統(tǒng)之間轉(zhuǎn)換的。
基本概念——數(shù)據(jù)指針和PDV
理解SAS的編譯過程,需要先了解兩個(gè)概念。
數(shù)據(jù)指針:可以理解成在當(dāng)前的內(nèi)存緩存區(qū),輸入數(shù)據(jù)所存儲(chǔ)的位置;
PDV(Program Data Vector):在DATA步中,所有涉及的變量當(dāng)前值存儲(chǔ)在該向量(PDV)中。
SAS程序的編譯過程如下圖所示:
下面,以一個(gè)簡(jiǎn)單的SAS程序?yàn)槔忉尵唧w編譯過程。
data test;
input x y z;
cards;
1 2 3
4 5 6
;
run;
編譯過程
編譯程序,開辟一塊內(nèi)存空間給x,y,z三個(gè)變量。初始化變量為缺失值。用INPUT語(yǔ)句輸入的這三個(gè)變量在DATA步執(zhí)行之前被置為缺失值,若是RETAIN語(yǔ)句創(chuàng)建的變量,則被保留。執(zhí)行INPUT語(yǔ)句。讀入第一行觀測(cè),并把讀入的數(shù)據(jù)放在PDV。執(zhí)行RUN語(yǔ)句。將PDV中的數(shù)據(jù)輸出至DATA步創(chuàng)建的test數(shù)據(jù)集中。SAS返回到DATA語(yǔ)句之后的第一個(gè)語(yǔ)句,并初始化PDV中非RETAIN語(yǔ)句創(chuàng)建的變量為缺失值。繼續(xù)讀入下一行觀測(cè)數(shù)據(jù)至PDV。如此循環(huán),直至觀測(cè)最后一行。結(jié)束DATA步,釋放內(nèi)存空間。
數(shù)據(jù)指針和PDV情況匯總
自動(dòng)變量