小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

sas優(yōu)化技巧-條件語句的正確選擇(select,if,where,having)

 kieojk 2016-07-21

1.       條件語句whereif的區(qū)別


從上圖可以看出,where在原始數(shù)據(jù)進入PDV(program  data  vector)前對數(shù)據(jù)進行判斷,是否滿足條件,滿足的條件的觀測值進入PDV,不滿足的則排除,PDV簡單的說就是在編譯過程中用于存儲新建數(shù)據(jù)集變量值的空間。而if是將原始數(shù)據(jù)集中的所有值放入PDV后進行條件判斷,滿足條件的輸出到新建數(shù)據(jù)集中。因此使用where條件篩選速度快于if。where只能從現(xiàn)有的sas數(shù)據(jù)集中選擇觀測,if語句還可以用input語句產生的觀測中選Where可以作為選項進行應用。

運行速度比較:


結果比較: if條件語句首先是把sashelp邏輯庫的class數(shù)據(jù)集前5個觀測對象放入PDV,對滿足年齡大于13歲的對象輸出到新建數(shù)據(jù)集;而where是數(shù)據(jù)放入PDV前逐一進行判斷,滿足條件的前5個觀測對象放入PDV,輸出。所以if輸出的觀測對象個數(shù)時小于或等于obs指定值,而where是等于obs指定值。


Ifwhere關鍵不同點匯總:

2. selectif

當被判斷變量為數(shù)值型變量,select處理效率高于if,而當變量為字符型時if條件判斷效率較高。兩者使用選擇:

選擇if

a.       變量為字符型;

b.       變量值不均勻分布;

c.       較少判斷條件。

選擇select

a.       數(shù)據(jù)規(guī)整分布;

b.       變量為數(shù)值型且條件間互斥,即判斷條件間無交集;

總得來說條件間互斥的數(shù)值型變量或條件較多時選擇select;其他if。且在數(shù)據(jù)量很大時兩者的效率才能凸顯。

data test_select;

 set sashelp.class;

 select;

  when (age le 12)  age_group='low-12';

  when (age le 15)  age_group='13-15';

  when (age ge 16) age_group='16-high';

  otherwise;

 end;

run;

3.sqlwherehaving的區(qū)別

sas sqlwherehaving條件的選擇規(guī)則類似于sas data set新建ifwhere的區(qū)別,having是對sql語句中groupby分割后的亞組數(shù)據(jù)集進行條件篩選,先按亞組計算將計算結果新變量放入新建表(tables)中,在按照having指定條件對亞組進行篩選;因此having需在group by語句后,而where是對整個數(shù)據(jù)集進行篩選,先篩選出符合條件的觀測對象,再按照group by分割的亞組進行計算,產生的新變量再放入新建表中,where語句需在group by之前;而當無groupby語句時having的作用相當于where;

/*having*/

proc sql noprint;

 create table data_having as

  select *,avg(age) as avgage from sashelp.class

   group by sex

    having age ge 15;

quit;

/*where*/

proc sql noprint;

 create table data_where as

  select *,avg(age) as avgage from sashelp.class

   where age ge 15

    group by sex;

quit;

結果差異:


兩者的主要差異:


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多