導航:首頁 > 源碼編譯 > SAS編譯和執行過程

SAS編譯和執行過程

發布時間:2022-06-11 19:13:47

❶ sas 宏變數解析是在編譯階段還是執行階段

%let 宏變數名=值;調用宏變數:&宏變數名 Tips: 1、以逗號作為宏變數定義的結束。

❷ 什麼是SAS系統

SAS系統(Statistics Analysis System)查詢系統是20世紀90年代初由EMBL的Thure Etzold博士帶領的課題組創建的,是一個功能強大的資料庫整合平台,可進行資料庫集成、序列查詢、序列處理等工作。

(2)SAS編譯和執行過程擴展閱讀:

SAS 系統全稱為Statistics Analysis System,最早由北卡羅來納州立大學的兩位生物統計學研究生編制,並於1976年成立了SAS軟體研究所,正式推出了SAS軟體。SAS是用於決策支持的大型集成信息系統,但該軟體系統最早的功能限於統計分析,至今,統計分析功能也仍是它的重要組成部分和核心功能。SAS現在的版本為9.4版,大小約為 8G。

經過多年的發展,SAS已被全世界120多個國家和地區的近三萬家機構所採用,直接用戶則超過三百萬人,遍及金融、醫葯衛生、生產、運輸、通訊、政府和教育科研等領域。在數據處理和統計分析領域,SAS系統被譽為國際上的標准軟體系統,並在96~97年度被評選為建立資料庫的首選產品。堪稱統計軟體界的巨無霸。

❸ SAS是一種什麼樣的語言

SAS語言是一種用於統計分析的編程語言,源自於北卡羅來納州立大學的一個計劃。它可以讀取普通的電子表格和資料庫,然後以圖形或表格的方式導出為RTF、HTML或是PDF文件。SAS語言可以在Windows、Linux、Unix與大型計算機下使用編譯器運行。
統計分析系統和世界編程系統都是支援SAS語言的編譯器。

❹ SAS是什麼

一、SAS系統簡介

SAS是一個龐大的系統,它目前的版本可以在多種操作系統中運行。當前在國內被廣泛使用的最新版本是8.2版,功能很強大,我深有體會。

據說9.0版已在國外面世,已經有一些有關它的搶先報道在網路上廣為流傳,說它如何如何美妙,令人不禁充滿期待。

SAS8.2的完整版本包含以下數十個模塊。

BASE,GRAPH,ETS,FSP,AF,OR,IML,SHARE,QC,STAT,INSIGHT,ANALYST,ASSIST, CONNECT,CPE,LAB,EIS,WAREHOUSE,PC File Formats,GIS,SPECTRAVIEW, SHARE*NET, R/3,OnlineTutor: SAS Programming,MDDB Server,IT Service Vision Client, IntrNet Compute Services,Enterprise Reporter,MDDB Server common procts,Enterprise Miner,AppDev Studio,Integration Technologies等。

所謂模塊,我的理解是將功能相近的程序、代碼等集中起來組成相對獨立的部分,就稱之為模塊,類似於辦公軟體系統office中包含的word、excel、access等。各模塊具有相對獨立的功能范圍,我們常用的模塊有base,graph,stat,insight,assist,analyst模塊等,分別執行基本數據處理、繪圖、統計分析、數據探索、可視化數據處理等功能。其餘模塊我用得很少,知道得也很少,所以也就不多說了。

SAS系統的長處,體現於它的編程操作功能的無比強大。SAS一直以來也是注重於其編程語言的發展,對於可視化方式的菜單操作投入較少,其較早的版本僅有很少的菜單操作功能,使用起來也是非常的別扭。這很可能就是在windows人機互動式操作系統占統治地位的今天,SAS較少被人問津的原因之一。

到了最新的幾個版本,SAS也對可視化操作方法投入了一定的關注。從8.0版以後,出現了幾個功能強大的可視化操作的模塊,如insight模塊和analyst模塊等,其菜單操作的方便程度以及人機界面的親和性絕不亞於SPSS等著名的可視化統計分析軟體。

然而要想完全發揮SAS系統強大的功能,充分利用其提供的豐富資源,掌握SAS的編程操作是必要的,也只有這樣才能體現出SAS在各個方面的傑出才能。

二、SAS系統基本操作及基本概念

哪位要是連軟體的安裝和打開都要我啰嗦的話,我勸您還是買一套洪恩的《開天闢地》好好熱熱身先。

SAS 8.2的界面中間是三個並排(或層疊)的窗口,那個叫做Program Editor的窗口(窗口標簽為Editor)就是用來輸入SAS語句的,編程操作的所有內容都是在該窗口內完成的,各位還是要跟它先多熟悉一下。

(一)數據集(dataset)和庫

統計學的操作都是針對數據的,SAS中容納數據的文件稱為數據集,數據集又包含在不同的庫(暫且理解為資料庫吧)中。SAS中的庫分為永久性和臨時性兩種。顧名思義,存在於永久庫中的數據集是永久存在的(只要你不去刪除它),臨時庫中的數據集則在你退出SAS後自動被刪除。至於SAS中庫的概念,最簡單的理解就是一個目錄,一個存放數據集的目錄。

數據集的結構完全等同於我們一般所理解的數據表,由欄位和記錄所構成,在統計學中我們習慣將欄位稱為變數,在後面的內容中欄位和變數我們就理解為同一種東西吧!建立數據集的方法很多,編程操作中有專門的數據讀入方法來建立數據集,但需要將數據現場錄入,費時費力。如果數據量大,我勸各位還是先以其它方法將數據集建好,否則程序語句的絕大部分會浪費在數據的輸入上。

What are 其它方法?各位是不是去參考一下別的書籍或資料。要不您是不是可以等一等,我准備若干年後出一本SAS操作大全。

(二)SAS程序概述

和其它計算機語言一樣,SAS語言(稱為SCL語言,SAS Component Language)也有其專有的詞彙(即關鍵字)和語法。關鍵字、名字、特殊字元和運算符等按照語法規則排列組成SAS語句,而執行完整功能的若干個SAS語句就構成了SAS程序。

SAS程序包括多個步驟和一些控制語句,一般情況下均包括數據步和過程步,一個或多個、數據步或過程步,它們之間任何形式的組合均可成為一段SAS程序,只要能完成一個完整的功能。通常情況下SAS程序還包括一些全程語句,用以控制貫穿整個SAS程序的某些選項、變數或程序運行的環境。

SAS程序的語句一般以關鍵字開始,以一個分號結束,一條語句可佔多行(SAS每看到一個分號,就將其以前、上一個分號以後的所有東東當作一條語句來處理,而不管他們處在多少個不同的行中)。SAS語句對字母的大小寫不敏感,你可以根據個人習慣決定字母的大寫或小寫。

1. 庫名(庫標記)的定義

為了保存寶貴的數據和方便操作起見,我習慣於指定自己的庫名及其路徑(目錄),因為SAS系統中已有的永久庫(SASUSER)無論庫名還是其對應的路徑都太過繁瑣,使用太不方便。程序中用到的數據,都可以永久的保存於該路徑下,保證以後可以重復使用。指定庫名的語句為全程語句,其格式如下:

Libname 庫名 『路徑』;

例如我們指定的庫名為「a」,路徑為:「e:\data\」,SAS語句如下:

libname a 『e:\data\』;

2. 數據步

SAS的數據步以data語句開始,用於創建和處理數據集。Data語句以關鍵字「data」開始,格式如下:

data 數據集名;

例如:data a.case; 將創建在庫a中名為case的SAS數據集,語句執行後你可在與庫a對應的目錄下看到剛剛建立的數據集文件case。

Data語句所指定的數據集,一般都是以「庫名.數據集名」的格式出現的,也可以單獨的「數據集名」出現,此時的數據集系統默認為是臨時庫中的數據集,退出系統後將會被刪除。

data語句有兩個重要的功能,標志數據步的開始和命名將要創建的SAS數據集。

除data語句外,數據步一般情況下還包括infile語句、input語句以及datalines語句等。在不同的數據輸入方式下對於它們的使用方式也不一樣。

SAS程序有兩種常見的數據輸入方式,即從外部文件讀入和直接輸入兩種方式。

(1)外部文件讀入方式

數據若已經包含在某個外部文件(文本文件或數據文件)中,可用此方法輸入數據到數據集文件中。

在以上介紹的data語句後,寫入以下語句:

infile 『外部文件的所在位置及名稱』 選項;

input 變數名1變數名2 …變數名n;

infile語句用於從外部文件讀入數據,必須出現在input語句之前。它的功能是指定一個包含原始數據的外部文件。

input語句用於向系統表明如何讀入每一條數據記錄。它的主要功能有:讀入由語句指定的數據列,為相應的數據域定義變數名,確定變數的讀入模式。

例如:

libname a 『e:\data\』;

data a.student;

infile 『e:\data\student.txt』;

input name height weight;

以上程序將目錄「e:\data\」下的文本文件「student.txt」中的數據輸入數據集student中,該數據集存放於目錄「e:\data\」下。

(2)直接輸入方式

數據量較少或操作者意志力堅強的情況下採用此種輸入方式,在data語句之後寫入如下語句:

input變數名1變數名2 …變數名n;

datalines;(在以前的版本下為cards,新版本下兩者可通用)

… … … …(數據行)

… … … …(數據行)

… … … …(數據行)

;

datalines語句用於直接輸入數據,標志著數據塊的開始。

注意:這里的數據行中數據之間以空格分隔,當然也可以其它東東如逗號等來分隔,這里大家先以空格來分隔好了。因為不同的分隔方式下input語句要採取相應的控制選項,這些我們以後再討論,這里我們還是省省力氣吧。另外數據行輸完後不能像其它語句那樣直接在後面加上分號,而要另起一行輸入分號,這樣SAS才認為這是在輸入原始數據而不是在搞別的什麼。

例如:

libname a 『e:\data\』;

data a.student;

input name $ height weight;(name後面的$符號表示變數name為字元型變數)

datalines;

Linda 171 51

Mary 168 50

Selinna 169 49

;

以上程序將直接建立數據集文件student,該數據集文件存放於目錄「e:\data\」下。

3. 過程步

SAS程序的過程步表示一個處理過程,如排序、T檢驗、方差分析等等。過程步以關鍵字proc開始,後面緊跟著過程名,用以區分不同的程序步,並以關鍵字run結束。

一般的格式如下:

proc 過程名 選項列表;

……(其它語句);

……(其它語句);

run;

SAS程序中涉及的過程多達數百種,實現統計功能時常用的過程也有數十種之多,現將最為常用的過程名稱及其所能實現的功能列入下表(表1.1),以便各位提前熱熱身。

表1.1 常用的過程名稱及其功能

過程名
功 能

Sort
將指定的數據集按指定變數排序

Print
將數據集中的數據列表輸出

tabulate
將數據按照指定的分類變數以表格的形式分類匯總

Means
對指定的數值變數進行簡單的統計描述

Freq
對指定的分類變數進行簡單的統計描述

Ttest
對指定的變數做t檢驗

Anova
對指定的變數做方差分析

npar1way
對指定的變數做非參數檢驗

Reg
對指定的變數做回歸分析

Corr
對指定的變數做相關分析

Discrim
對指定的變數做判別分析

Cluster
對指定的變數做聚類分析

Chart
繪出低解析度的統計圖

4. 幾個常用的重要過程

在進入一般統計學功能實現的內容之前,有關數據預處理和執行重要公共功能的過程大家有必要預先掌握,這里選出幾個常用的和重要的過程進行討論。

(1)對SAS文件進行操作的datasets過程

datasets過程是對數據文件進行管理操作的工具,利用它我們可以實現以下功能:

將SAS文件從一個庫中拷入另一個庫中;

對SAS文件進行重命名;

修復損壞的SAS文件;

刪除SAS文件;

列出某一SAS庫中所有的SAS文件;

列出一個SAS數據集的屬性,如最後修改時間、數據是否壓縮、數據是否索引等;

對SAS文件進行設置密碼的操作;

向SAS數據集添加記錄;

對SAS數據集的屬性以及數據集內變數的屬性進行修改;

創建或刪除SAS數據集的索引;

創建並管理SAS數據集的核查文件;

創建或刪除SAS數據集的完整性規則。

datasets過程的一般格式如下:

proc datasets <選項列表>;

age 當前文件名 相關文件名列表</選項列表>;

append base=數據集名 <data=數據集名 其它選項>;

audit 文件名<(操作密碼)>; initiate;<其它代碼;>

change 舊文件名1=新文件名1 <…舊文件名n=新文件名n> <選項列表>;

contents <data=數據集名> <其它選項>;

out=庫標記 <其它選項>;

exclude 文件名 <其它選項>;(該語句只能在語句後出現,不能和select語句同時出現)

select 文件名 <其它選項>;(該語句只能在語句後出現,不能和exclude語句同時出現)

delete 文件名 <其它選項>;

exchange文件名1=交換文件名1 <…文件名n=交換文件名n> <選項列表>;

modify 文件名 <選項列表>;

<modify語句之從屬語句>;

repair文件名 <選項列表>;

save文件名 <選項列表>;

run;

是不是太繁瑣了,我都有些不耐煩了。不過我還是得寫,已經寫了嘛!不忍心浪費掉,最起碼可以用來充充數,擴大一下篇幅。至於各位,嫌煩的可以略過此部分,想用的時候再來溫習也不遲。下面我就不厭其煩地向各位介紹一下各選項及各條語句的含義和用法。

proc datasets語句後各選項的含義及用法見下表(表1.2)。

表1.2 proc datasets語句後各選項的含義及用法

選項
含義及用法

alter=轉換保護密碼
SAS文件設置有轉換操作密碼時用以驗證操作的合法性,密碼正確時代碼才會被執行

details/nodetails
控制有關SAS文件的詳細信息顯示與否,前者為顯示,後者不顯示,默認值為後者

force
此選項具有兩個功能:(1)在過程步的語句存在錯誤時仍然強製程序的執行;(2)在append語句中,兩個數據集的變數不完全相同時仍然強制append語句的執行。

gennum=
控制對衍生數據集的處理方式,等號後可為all, hist, revert或某一整數

kill
此選項表示刪除待處理的庫中的所有文件,應慎用

library=庫標記
用以指定所要處理的庫

memtype=成員類型
指定處理所針對的庫成員類型(文件類型),默認值為all(所有類型)

nolist
在日誌文件中禁止對所處理文件目錄的顯示

nowarn
在語句中指定的文件不存在等情況下,禁止顯示出錯信息,強製程序繼續執行

pw=操作密碼
SAS文件設置操作密碼時驗證操作的合法性(包括讀、防寫以及轉換保護的文件)

read=讀保護密碼
SAS文件設置讀保護密碼時驗證操作的合法性

age語句用於批量地重命名文件,按照當前文件和相關文件的排列順序,依次將後一個文件名重命名給前一個文件,結果是最後一個文件被刪除,當前文件名被廢棄。

對此語句我所了解的就這么多,而且還是通過試驗得出的結論,但總感覺還是理解的不對,哪位若有高見還請不吝賜教。

append語句執行向數據集添加記錄的功能,選項「base=數據集名」用以指定要添加記錄的數據集,「data=數據集名」則指定所要添加的記錄所在的數據集,此選項若省略則默認為當前數據集(最近一次操作的數據集)。

audit語句用於對文件的核查,生成核查文件並對其進行管理;change語句以新文件名替換舊文件名;contents語句用於顯示指定數據集或當前數據集的各種屬性;語句用於將當前庫中相應的文件拷貝到指定的庫中,選項「out=庫標記」用來指定文件要拷貝到的目標庫;delete語句用於刪除指定的文件;exchange語句的功能是將等號前後兩個文件的文件名進行互換;modify語句用於修改文件各方面的屬性;repair語句用於對指定的文件(受到過某種損壞)進行修復,使其恢復到可以使用的狀態;save語句的功能是將其指定的文件保留,當前庫中的其他所有文件則被刪除。

(2)對數據文件中記錄進行排序的sort過程

sort過程的功能是對指定數據集中的記錄按照指定的變數進行排序。由於諸多過程有對數據集記錄進行排序的需要,比如過程步中存在by語句(用以將數據文件分割為若幹部分)的情況下,就需要按照by語句後的變數對數據先行排序,所以sort過程非常有用,而且非常常用。

sort過程的一般格式如下:

proc sort 選項列表;

by <descending> 變數名1 <變數名2 … 變數名n>;

run;

proc sort語句後各選項含義及其用法見下表(表1.3)。

表1.3 proc sort語句後各選項含義及其用法

選項
含義及用法

data=數據集名
用以指定sort過程所要處理的數據集,若省略則默認為最近建立或處理的數據集

date
此選項指定在不改變文件創建日期和修改日期的條件下對文件進行排序操作

out=數據集名
將排序後文件以指定的文件名存儲,原文件不進行任何修改,若無此選項則將原文件覆蓋

sortseq=排序依據
指定對字元型變數排序時依據的標准

reverse/equals/noequals
指定輸出數據中的排序方式,三者分別表示將字元變數的次序翻轉顯示,在排序變數的各水平內部次序保持不變,在排序變數的各水平內部允許次序的改變

nopkey/noprecs
指定重復變數的消除方式,前者表示除去排序變數值重復的記錄,後者表示除去所有變數值重復的記錄

sortsize=
用以指定可用最大內存的大小,等號後為表示內存大小的數值及單位,比如10m

force
用以強制執行重復排序(對已建立索引的文件排序)過程

tagsort
指定在臨時文件中僅存儲排序變數和記錄編號,以減少對磁碟空間的使用

by語句即用以指定排序所要依據的變數,變數可為數值型也可為字元型,其後可指定多個變數,sort過程在按照靠前的變數進行排序的情況下再按照靠後的變數進行排序。by語句中每個變數前可用descending/ascending選項來指定按照其排序的方式(降序或升序),默認狀態為升序。

(3)將數據文件輸出顯示的print過程

print過程的功能是將SAS數據集的記錄以一定的方式顯示到輸出設備(顯示屏),可以顯示其全部的變數或部分變數。利用此過程,你可以創建從簡單列表到可進行數據匯總的各種報告的各種不同的表單。

print過程的一般格式如下:

proc print 選項列表;

by <descending> 變數名1 <變數名2 … 變數名n 其他選項>;

pageby 變數名;

sumby 變數名;

id 變數名;

sum變數名;

var變數名;

run;

proc print語句後可跟的選項含義及其用法見下表(表1.4)

表1.4 proc print語句後選項含義及其用法

選項
含義及用法

contents=文本
用以指定html內容文件中指向輸出的鏈接的標識文本,等號後可為任何文本

data=數據集名
指定所要處理的數據集,等號後為數據集文件名

double
指定在相鄰的記錄間插入一空行

n=字元串
在報告的末尾或by變數各水平分組的末尾顯示顯示記錄的數目,並以等號後的字元串對其進行標識

noobs
禁止記錄編號在報告中的顯示

obs=列標題
用以指定記錄編號所在列的列標題

round
對未進行格式化的數值變數進行四捨五入,統一格式化為帶兩位小數的十進制數值

rows=page
規定頁面格式,目前』page』是此選項唯一可用的值,表示在每一頁中只顯示一條記錄的一行變數值,即一行中顯示盡可能多的記錄數

width=列寬度
指定列的寬度,可取的值有』full』,』minimum』,』uniform』,』uniformby』等,

heading=方向
取值可為v(vertical)或h(horizontal),表示列標題顯示的方向(橫向或縱向)

label
指定以變數標識作為相應的列標題,否則以變數名作為列標題

split=字元
首先此選項指定以變數標識作為列標題,以指定的字元作為列標題換行的標志

style=類型元素
指定報告中特定位置所要應用的類型元素(涉及很多內容,詳細內容略)

by語句在所有過程中的用法都相同,即將數據集分割為若干小數據集分別進行處理。pageby語句用來控制換頁時變數的顯示方式,對於其後所指定的變數,相同的值不會顯示在不同的頁中,該變數某一值的記錄在一頁的剩餘部分顯示不下時,則從該值的第一條記錄開始換行顯示。sumby語句的作用和pageby語句相似,只不過是將換頁的動作換為求和,對指定變數的每一值計算var變數的總計值。id語句的作用是用指定的變數值代替記錄編號對每一條記錄進行標識。sum語句用於指定報告中要進行求和操作的變數,var語句用於指定要在報告中顯示的變數。

以上過程作用較為普遍,使用頻率較高,有必要預先了解,以便於後面所討論內容的順利進行。

為節省篇幅,這里不進行實例演示。內容過於枯燥,可能的錯誤也難免,還請各位多多包涵。

SAS程序操作的大概情況就草草的這樣介紹一下吧,說得太多的話我怕各位沒有耐心看下去。更多的內容我想還是留在實際的例子中來介紹,這樣大家可以好好的切身體會一下,然後就會印象深刻,實際運用起來也就得心應手了。

❺ SAS的問題

1.關於時間的問題,你要看你的sas的license的使用日期.sas軟體是只租不賣的,每個license有一定的使用期限,只要你把時間調到這個期限內都可以用的.你可以使用一下語句來查看你的license的一些信息.
proc setinit;
run;

2.導出EXCEL文件的代碼直接寫在編輯器裡面,按f3執行就可以
proc export data=datasetName
outfile="E:\myExcel.xls" replace
DBMS=EXCEL;
SHEET="ExcelSheetName";
GETNAMES=Yes;
run;

以上代碼中的outfile是你的導出的excel文件的路徑,replace代表覆蓋掉你指定的.xls文件裡面的內容,如果不想覆蓋原文件的內容就不寫replace,dbms指定資料庫管理系統,就是如果你要導出到excel就寫EXCLE.sheet是指定excel文件的sheet頁的名字,getname是指導出到數據包含列名.

如果出現ERROR: DBMS type EXCEL not valid for export.
那麼很可能是因為SAS/ACCESS 轉換PC文件格式沒有在sas伺服器上面驗證.

3.系統聚類分析的基本思想是首先將每個樣本當作一類,然後根據樣本之間的相似程度並類,並計算新類與其它類之間的距離,再選擇相近者並類,每合並一次減少一類,繼續這一過程,直到所有樣本都並成一類為止。在聚類過程中,我們選用歐氏距離來度量類與類之間的相似程度,聚類方法採用類平均法。

SAS/STAT中提供了譜系聚類、快速聚類、變數聚類等聚類過程。

那個求最短距離的代碼我不知道 ,因為我不是學統計的,沒用過,你自己查查資料吧.另外sas自帶的幫助文檔就是最好的資料,你可以好好利用,再推薦給你一個網站http://support.sas.com,有sas問題直接在上面搜索就可以了

❻ 求助:SAS程序編寫,做題

沒有命題呀?只給數據,可以建庫,要分析什麼呢?如下例可計算身高與體重的平均值:

data li1;
input id $ name $ height weight@@ ;
cards;
1 tom 187 75
2 cendy 169 57
3 mcdonald 189 85
;
run;
proc means data=li1;
var height weight;
run;

❼ SAS語言的作用

SAS是一種專用的數據處理、統計計算語言,但是它也包含一般的高級語言編程能力並擴充了許多數學、統計等方面的函數。
SAS語言的編程計算能力主要由SAS數據步提供。DATA語句以關鍵字DATA 開頭,後面給出一個數據集名,例如:
data out1;
則在本數據步要生成的數據集,其名字為out1。我們也可以省略數據集名,這時SAS自動生成一個臨時數據集名。也可以使用特殊名字_NULL_ ,表示本數據步不生成數據集。
一賦值語句
在SAS中用賦值語句計算一個值並存放到變數中。
格式為
變數名 = 表達式;
例如:
avg = (math + chinese)/2;
isfem = (sex='女');
y=sin(x)**2;
newv = .;
其中第一個賦值語句用一個公式計算平均分數。第二個生成一個取值為0或1的變數,性別為女時為1,否則為0。第三個使用了正弦函數和乘方運算。第四個給變數賦了缺失值。
二輸出語句
SAS數據步的輸出一般是數據集,用賦值語句計算的結果會自動寫入數據集。SAS也提供了一個PUT語句用於立即列印輸出結果。
PUT語句的語法:
PUT 輸出項表
輸出項表中只能是變數或字元串,項間用空格隔開。如:
data;
x=0.5;
y=sin(x);
put 'Sine function value of ' x 'is ' y;
run;
結果將在運行記錄窗口顯示一行
Sine function value of 0.5 is 0.4794255386
PUT說明
⒈在PUT語句中,若在變數名後加「=」,則指定輸出項可以顯示帶有變數名的輸出結果。
比如把上程序中的PUT語句改為
put x= y=;
則結果在LOG窗口顯示為
X=0.5 Y=0.4794255386
⒉指定變數輸出項的具體列位置及小數位數
絕對位置格式:
變數 起始列-結束列.小數位數
比如,
put x 10-20 .6 y 30-40 .6;
指定把X數值顯示在第10-20列,保留6位小數,把
Y數值顯示在第30-40列,保留6位小數。
在指定的列位置內,數值型數據靠右對齊,字元型
數據靠左對齊。變數為整數值或者字元型則不指定
小數位數。
相對位置格式:
變數 寬度.小數位數(用於數值型)
變數 $寬度.(用於字元型)
如:put x 20.8 y 20.8; 使X佔用第1-20列,8位小數,右對齊;Y佔用第21-40列,8位小數,右對齊。
而put name $10.;使name佔用10列。
輸出佔位不滿指定寬度時,數值型數據向右對齊,字元型數據向左對齊。
⒊如果希望PUT語句的輸出不產生換行,使下一個PUT的結果可以顯示在同一行,只要在PUT 語句結尾處加一個@符。
PUT語句的輸出結果預設情況下被送到運行記錄窗口。若在PUT語句之前用FILE語句可以改變PUT語句的輸出目的地。如,在PUT語句之前用file print;可以把PUT語句的輸出轉向到輸出窗口。在FILE語句中指定一個包含文件名的字元串可以把PUT語句的輸出轉向到此文件中。比如file 'tmp.out';輸出文件把後續的PUT語句輸出轉向到當前工作目錄下的文件「tmp.out」中,生成tmp.out 。注意當前工作目錄在SAS狀態欄的右方顯示,雙擊可以更改。文件名也可以指定全路徑,比如「C:SASTMP.OUT」。
三分支結構
⒈if...then...else 結構
⒉SELECT結構
1. if...then...else 結構
格式為:
IF 條件 THEN 語句;
ELSE 語句;
例: data temp1
input x @@;
if x>0 then put x '是正數';
else put x '是負數';
cards;
1 2 -3 4 -5
;
run;
有時我們在條件成立時需要進行的操作無法用一個語句完成,這時可以使用SAS提供的復合語句功能。例:
data;
input x@@; /*不分行符@@的使用:每讀入一天記錄後,數據指針保持原位不換行,
繼續讀下一條記錄*/
if x>0 then do;
y=2*x;
put 'f(' x ')=' y;
end;
else put 'Data Error!';
cards;
1 2 -3 4 -5
;
run;
如果當條件不成立時,不進行什麼操作,可以不使用ELSE及其後面的語句。
2.SELECT結構
格式一:
SELECT (選擇表達式);
WHEN(值列表) 語句;
WHEN(值列表) 語句;
……
OTHERWISE 語句;
END;
功能及流程:
執行SELECT結構時,先計算出選擇表達式和值列表中的所有值,然後把選擇表達式值由前向後與值列表中的值相比,發現相等值則執行對應的語句,然後退出SELECT結構(不再查看後面的值列表)。如果選擇表達式的值不等於任何值列表中的值則執行OTHERWISE對應的語句,這種情況下沒有OTHERWISE語句會出錯。
例:
DATA ;
INPUT month $ @@;
put month @;
SELECT(month);
WHEN('Feb', 'Mar', 'Apr') put '春天';
WHEN('May', 'Jun', 'Jul') put '夏天';
OTHERWISE put '秋天或冬天';
END;
CARDS;
Mar Jun oct
;
run;
格式二:
SELECT;
WHEN(條件) 語句;
WHEN(條件) 語句;
……
OTHERWISE 語句;
END;
這種SELECT語句沒有選擇表達式,而是在每
一個WHEN語句指定一個條件(邏輯表達式),
執行第一個滿足條件的WHEN後的語句。如果所
有條件都不滿足則執行OTHERWISE後的語句。
例:
data;
input age @@;
put age @;
SELECT;
WHEN(age<=12) put '少年';
WHEN(age<35) put '青年';
OTHERWISE put '中老年';
END;
cards;
10 30 50
;
run;
四循環結構
⒈計數DO循環
⒉當型循環
⒊直到型循環
⒈計數DO循環
計數DO循環的格式:
DO 計數變數 = 起始值 TO 結束值 BY 步長;
循環體語句……
END;
這種結構與BASIC中計數循環很類似,功能也相當,只是在SAS中是以關鍵字DO開頭(不是FOR),另外步長用BY引導(不是STEP),而結構以END結束(而不是NEXT)。
其功能與流程:
程序先把計數變數賦值為起始值,如果此值小於等於結束值則執行循環體語句,然後把計數變數加上步長,再判斷它是否小於等於結束值,如果是則繼續執行循環體,直到計數變數的值大於結束值為止。上述結構中「BY 步長」可以省略,這時步長為1。如果步長取負值,則繼續循環的條件是計數變數大於等於結束值。
計數DO循環舉例
data;
sum=0;
DO i = 1 TO 10 ;
sum +i;
/*此處sum+i等價於sum=sum+i*/
END;
PUT sum=;
run;
在循環體中可以用LEAVE語句跳出循環(功能與C語言的break語句相當),如:
data;
n=13;
flag=1;
DO i = 2 TO n/2 ;
if mod(n,i)=0 then do;
flag=0;
leave;
end;
END;
if flag=1 then
put n 是素數;
else
put n 不是素數;
run;
⒉當型循環
當型循環的格式:
DO WHILE(循環繼續條件);
循環體語句……
END;
程序先判斷循環繼續條件是否成立,成立時執行循環體語句,再判斷循環繼續條件,如此重復,直到循環繼續條件不再成立。
data;
x=243;
y=63;
z=mod(x,y);
DO WHILE (z ^= 0);
x=y;
y=z;
z= mod(x,y);
END;
put y;
run;
⒊直到型循環
直到型循環的格式:
DO UNTIL (循環退出條件);
循環體語句……
END;
程序先判斷循環退出條件是否成立,成立則結束循環,否則繼續。例:
data;
n=0;
do until (n>=5);
n+1;
put n=;
end;
run;

❽ SAS編程語言知多少

Base SAS模塊的:
· Data Step(數據步,在SAS幫助文檔中稱為SAS 語言)
· DS2(Data Step 2,最新一代的編程語言)
· MACRO(宏)
· SQL和FedSQL(雖然只是兩個過程步,不能稱之為一門語言,但是作為數據處理尤其是資料庫處理的編程語言其作用相當重要。)
· FCMP(Function Compiler,用於用戶自定義函數和子常式的編譯和管理)
· GTL(Graphic Template Language,圖形模板語言)
· Metadata Language(元數據管理語言)

SAS/AF模塊的:
· SCL(SAS Component Language SAS組件語言,現在已經很少有人用了。)

SAS/OR模塊的:
· OPTMODEL(Optimization Model,優化模型編程語言)

SAS/IML模塊的:
· IML(矩陣編程語言)

SAS/IML Studio模塊的:
· IMLPlus(IML 語言的擴展,主要用於生成圖形、調用SAS過程步和非SAS程序)

JMP模塊的:
· JSL(JMP Script Language,JMP 腳本語言)

❾ 如何在不打開SAS的情況下通過批處理文件調用一批SAS程序並保存運行結果

謝謝兩位的回答,這個問題其實還可以這樣實現,建立文件名為run.bat的批處理文件,內容為:@echo on "C:\Program Files\SAS Institute\SAS\V8\sas.exe" -sysin E:\SASP\prg1.sas "C:\Program Files\SAS Institute\SAS\V8\sas.exe" -sysin E:\SASP\prg2.sas...@echo off 但我看到有人用的方法更簡單,如內容為SAS PRG1.SASSAS PRG2.SASSAS PRG3.SAS...的BAT文件也可以實現上述功能,但不知道如何設置

❿ sas 程序

一個數據步可以包括多個INPUT語句。在數據步執行過程中,一般的,在INPUT語句執行前,會默認從外部數據源讀取一個觀測記錄(一般為一行或多行)到輸入緩沖器中,然後按照INPUT設定的格式讀入相關變數到PDV中。當程序有多個INPUT語句時,每一個INPUT語句都會在執行前讀入一個觀測記錄到輸入緩沖器。因此若前一個input語句執行完畢之後,若該行的數據沒有使用完,遇到下一個INPUT語句時也會放棄之前沒有用完的數據。若需要保留前一個INPUT語句使用過的數據行供以後的input語句使用,只需在前一個INPUT語句最後加入跟蹤符合@,表示該行沒有用完的數據暫時保存在輸入緩沖器中以備下一個最近的INPUT語句使用。
在數據步執行的每次循環開始時,程序會將輸入緩沖器中的信息刪除,在程序執行過程中遇到INPUT語句時,就從源數據文件中讀入一個新的觀測記錄(一般是一行或多行)到輸入緩沖器。如果源數據文件中一個數據行有多個觀測記錄,每次循環也只能讀取第一個。若要在程序運行的下一個循環中繼續讀取之前沒有讀完的數據行,只需在INPUT語句最後加入兩個跟蹤符號@@,表示該行沒有用完的數據保存在輸入緩沖器中以備下一個程序循環繼續使用。
例如:
data nums;
input x @;
input y;
datalines;
1 2
3 4
5 6
7 8
;
run;
proc print;run;
注意上述程序第二行的最後「@」符合。
data nums;
input x y @@;
datalines;
1 2 3 4
5 6 7 8
;
run;
proc print;run;

不知道對不對~
希望回答對你有幫助

閱讀全文

與SAS編譯和執行過程相關的資料

熱點內容
樂高機器人nxt編程軟體 瀏覽:583
linuxx264編譯 瀏覽:343
華夏銀行網銀盾用什麼app 瀏覽:583
單片機棧區 瀏覽:64
直流馬達如何連接5v單片機 瀏覽:261
後綴為win的文件怎麼解壓 瀏覽:802
壓縮包解壓後為什麼一張白紙 瀏覽:585
伺服器和雲盒子 瀏覽:172
python畫cad電氣圖 瀏覽:419
三菱plcfx3sa編程電纜 瀏覽:314
山西視頻加密防盜 瀏覽:839
華為mml命令查看用戶量 瀏覽:907
場論朗道pdf 瀏覽:373
如何使用qtquick編譯器 瀏覽:50
山西高配伺服器雲伺服器 瀏覽:744
為什麼編譯按f9沒反應 瀏覽:122
購物app都適合買什麼東西 瀏覽:277
savetxt函數python 瀏覽:577
編譯器小端改大端 瀏覽:642
華為安卓哪些文件夾能刪除 瀏覽:406