這是sasor們不分階級不分貧富都可以講的話,裡面就包含了常說的data step,proc step和macro。sas的基礎語言元素主要是在這裡演進而來。這個語言可以說是七十和八十年代面向過程處理語言的扛鼎之作,甚至還帶有濃郁的非結構化色彩;難得的是sas公司作為偏重技術的私人公司,二十多年以繼承發展而非不斷否定的方式打造base,使得一些二十多歲「高齡」的函式和過程歷久彌新,在如今物件導向的強勢群體中仍以面向過程的獨特魅力占有一席之地。
data step為處理與資料儲存引擎的互動提供了規範,可以處理大量複雜的資料操作和變數操作,data step的底層是用c語言開發的。而proc step的出現則具有兩重含義,一是將一些常用的過程組合歸整為固定的過程呼叫,在語言書寫上或處理效率上起到提公升作用;二是確定了今後很多sas模組語言的規範,比如proc 的呼叫格式,class, var, by等語句,被廣泛地應用在統計模組(如proc reg),資料訪問模組(如proc dbload),多維模組(proc mddb),資料共享模組(如proc server)以及很多gui驅動的模組的shell命令(如em中的proc neural)。proc step用data step和c語言結合開發而成。
macro是base中增強程式流程控制的語言機制。macro並不是函式封裝的概念,它的核心思路是文字替換,同作業系統shell指令碼的機制相似。因此,macro的執行是依據macro定義首先進行文字替換,得出最終程式語句後再解釋執行。所以在記憶體分配中,並不像其它語言中那樣形成函式呼叫堆疊。所以在macro開發中,不能像函式呼叫那樣實現呼叫現場退棧式的引數傳遞。雖然這種機制不像函式呼叫那樣帶來更多的程式設計靈活性,但是由於文字替換不涉及複雜的記憶體分配管理,所以即使用很複雜的macro,替換的效率也很高,同時出現記憶體管理錯誤的概率也較小。由於macro的設計含有大量的非結構性元素,所以程式設計的流程管理要多加注意,否則很容易造成程式可讀性差的現象(事實上,看到%就想吐的現象是普遍存在的)。
base中有乙個過程值得單獨加以考察,就是proc sql。事實上,它實現了對sql的相容,給很多熟悉sql的程式設計者多了乙個選擇。截至v8系列,proc sql使用的sql是基於sql92標準的sas sql超集,有很多sas特點的語法。關於同樣的處理是使用sql還是data / proc step效率高的問題可以另行討論,簡單的說,從設計思路上,sql是基於集合的語言,而sas是基於記錄的語言;sas的開發在sql和data / proc step上並不是協調一致的,在v6的sas中,很多sql操作明顯比data / proc step低效,在v8中,sql有了明顯改善,有些情況下會超過data / proc step,但是也需具體情況具體分析,隨著資料量的增長,proc sql不如data / proc step記憶體管理穩定的現象會漸漸明顯,效率會有較大差距;在v9開發中,sql的勢力進一步增強,提公升幅度也會比以前大。
base語言的技能和思路是sas的基本功,也是進入至高境界的重要途徑。對於初入江湖的少俠,base語言像馬步衝拳非連不可,而到了「手中無劍,心中有劍」境界的大俠,也往往只用sas擺平一切,**思路之驚豔讓人嘆為觀止。
ASIHttpRequest登入與Basic驗證
一 asihttprequest元件的新增在我的其他blog裡有介紹,這裡不予贅述。二 基本的request ibaction graburl id sender 二 帶basic驗證的request 新增 1 設定request模式為basic,request 2 新增username和passw...
SAS學習筆記 SAS資料步中常用SAS語句
1.資料獲取語句 例1 用input語句讀取資料流中的資料 data sastjfx2 1 input name weight height cards wang 42 160 zhang 46 170 run proc print run input語句記錄描述輸入資料記錄值的形式,給相應的變數賦...
在Windows上VSCode執行Bash終端
可能windows開發的乙個缺點就是與shell結合的不好,git bash提供了一種方式可以在windows下執行linux命令,如何將其結合在vscode中使用呢?兩種方式 1.將git bash目錄比如c program files x86 git bin bash.exe新增到環境變數中,就...