《SAS编程与数据挖掘商业案例》学习笔记之四
5.雙set語句的應用(2個指針,一個pdv)
libname chapt3 'f:\data_model\book_data\chapt3';
data percent;
????if _n_ = 1 then
????????set chapt3.summary(keep = cargosum);
????set chapt3.empcount;
????pctemps = numemps / cargosum;
run;
解讀:編譯后,內存中會出現雙指針;同時生成一個pdv;
首先在內存中開辟一個pdv,讀取數據集summary的第一個觀測,讀取變量cargosum的值并保留;
再讀取第二個數據集empcount,并計算pctemps=numemps / cargosum;輸出數據并返回到data;
此時if語句不再執行,讀取數據集empcount的第二條觀測,并計算pctemps=numemps / cargosum;如此循環直到讀完empcount。
?
?在商業實戰中最長見有兩種情況:一種是按照索引匹配和更新數據;另一種是按照某一個變量排序,對排序變量實行set/set操作。
?
expenses含有flightid fltdate??expenses三個變量
incomes含有flightid fltdate??incomes三個變量
兩個表關聯一起的實現可以用proc sql的形式很容易的實現,但是當數據量大時,利用set/set語句的效率遠遠高于sql,尤其是對查詢表簡歷索引之后。
?
?
proc datasets lib=chapt2;
modify income;
index create dteflt=(flightid fltdate)/nomiss unique;
quit;
?
data profit errors;
????set chapt3.expenses;
????set chapt3.income key = dteflt;
????if _iorc_ = 0 then do;
??????profit =sum(income,- expenses);;
??????output profit;
????end;
????else do;
??????_error_ = 0;
??????output errors;
????end;
run;
?
語句?key = dteflt是利用索引鍵來匹配兩個表數據,自動生成的變量_iorc_?為0,表示匹配成功,_error_為0表示無錯誤信息
總結如下:
對于兩個表有相同的表結構且被查詢的表已經建立了基于該相同變量的索引的情況下,set/set語句是最高效的方式;
主表的指針一般是從第一天一直掃描到最后一條,不走回頭路,但是對于被查詢表,可以根據索引跳躍數據指針;
對應的主表和建立索引的被查詢表一般不再排序;
總結
以上是生活随笔為你收集整理的《SAS编程与数据挖掘商业案例》学习笔记之四的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《SAS编程与数据挖掘商业案例》学习笔记
- 下一篇: 《SAS编程与数据挖掘商业案例》学习笔记