[SAS] 有效運用PROC SQL指南

九月 15, 2011 | | [SAS] 有效運用PROC SQL指南 已關閉迴響。

距離上一篇文章又隔了一段時間…

前幾天看到一篇Jane Stroupe與Linda Jolley針對有效使用PROC SQL的技術文章

藉由這篇文章來分享敝人使用PROC SQL的些微心得

應該對SAS SQL初學者有些幫助

1. 基本敘述句的順序

去年秋天曾簡單介紹過SAS SQL的寫法,例如:[SAS] SQL 基本指令介紹part2[SAS] SQL 基本指令介紹part3

甚至是如何使用SAS SQL做tables之間的join:[SAS] SQL join tables

文中都有簡單的範例做參考

還記得這些SQL專用敘述句,例如select、from、where、group by、having、order by等都有固定的順序嗎?

複習一下:

proc sql;
     select ….
        from  ….
          where ….
            group by ….
               having  ….
                order by ….
;
quit;

使用proc sql做起頭應該沒有問題吧?用quit;結尾應該也不是難事

重點就在於中間這些敘述句的順序,在SAS SQL內的順序是不可以替換的

那!SAS在做SQL運算時,是如何來用這些敘述句?

proc sql;
      select ….   (5)
        from  ….   (1)
          where ….   (2)
            group by ….   (3)
              having  ….   (4)
                order by ….   (6)
;
quit;

sumit出去後,第一步自然先去找資料源頭(from…),接著進行where的篩選條件、針對分類(group by)做整理後

處理having的東西,having的功能類似where篩選,再來是收錄select後的欄位(們),最後以排序作結

如此一來,邏輯一目了然!銘記於心對於SQL code的撰寫上有非常大的幫助

2.排序上的優點

DATA step內使用by statement時,還記得by後面的變項(們)要先sort過吧?

唯有先PROC SORT後才可以做下一步的處理動作

以merge tables而言,倘若在DATA step裡面用merge statement,勢必要在前面先做過PROC SORT才可merge

然而,在PROC SQL內,可以直接join tables,程式不需要分兩段先處理PROC SORT、再DATA step

例如inner join,可以一步到位:

proc sql;
    select *
       from one, two
       where one.x=two.x
 ;
quit;

因為在SAS SQL內,會自動做排序動作

若能善用這點,將會事半功倍啊!

倘若要使用到稍微複雜的join tables,PROC SQL是敝人的首選程序

順帶提,參考文章內有一部分提的稍為深入一些

例如某些情況下,為了節省時間會使用PROC SQL的options來控制sql的remerge

如何使用in-line view?下index?

這些動作都有共同的目的:提升效率、節省時間

有興趣的朋友請參照原文

從DATA step跳到SQL的初心者,或許對這樣的邏輯與語法會不習慣

使用久了會發現其實query也蠻方便的!

—-

參考資料:Jane Stroupe and Linda Jolley, Dear Miss SASAnswers: A Guide to Efficient PROC SQL Coding, http://support.sas.com/resources/papers/sgf09/336-2009.pdf


Comments



You must be logged in to post a comment.

Name (required)

Email (required)

個人網站

Speak your mind

total of 3715377 visits