1樓:第零
sas是一種專用的資料處理、統計計算語言,但是它也包含一般的高階語言程式設計能力並擴充了許多數學、統計等方面的函式。
sas語言的程式設計計算能力主要由sas資料步提供。data語句以關鍵字data 開頭,後面給出一個資料集名,例如:
data out1;
則在本資料步要生成的資料集,其名字為out1。我們也可以省略資料集名,這時sas自動生成一個臨時資料集名。也可以使用特殊名字_null_ ,表示本資料步不生成資料集。
一賦值語句
在sas中用賦值語句計算一個值並存放到變數中。
格式為變數名 = 表示式;
例如:avg = (math + chinese)/2;
isfem = (***='女');
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:\sas\tmp.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程式語言知多少
2樓:匿名使用者
base sas模組的:
· data step(
資料步,在sas幫助文件中稱為sas 語言)
· ds2(data step 2,最新一代的程式語言)
· macro(巨集)
· sql和fedsql(雖然只是兩個過程步,不能稱之為一門語言,但是作為資料處理尤其是資料庫處理的程式語言其作用相當重要。)
· fcmp(function ***piler,用於使用者自定義函式和子例程的編譯和管理)
· gtl(graphic template language,圖形模板語言)
· metadata language(後設資料管理語言)
sas/af模組的:
· scl(sas ***ponent language sas元件語言,現在已經很少有人用了。)
sas/or模組的:
· optmodel(optimization model,優化模型程式語言)
sas/iml模組的:
· iml(矩陣程式語言)
sas/iml studio模組的:
· imlplus(iml 語言的擴充套件,主要用於生成圖形、呼叫sas過程步和非sas程式)
jmp模組的:
· jsl(jmp script language,jmp 指令碼語言)
c語言程式設計,c語言程式設計
首先void是返回值型別,就是空值,也就是說這個函式裡面不能有返回值。delay這個是函式名,沒什麼好說。至於uchar 應該是引數型別,但是我還沒有見過這樣的引數型別 可能是我見識少了 我只見過 nchar,varchar nvarchar 之類的。而t就是引數啦 main printf 總運費 ...
用於硬體程式設計的有哪些程式語言,硬體程式語言有哪些?
我就是這個方向的。c語言,matlab,verilog,vhdl用的多。偶爾需要c 或者labview做上位機和硬體通訊。主要彙編,c語言用得了多了 就因為c語言的指標這個東西太牛x了 矯翼凌翔鵷。赤縣揚雷聲,硬體程式語言有哪些?早一點是vhdl,現在是verilog,c語言,matlab,veri...
c語言網路程式設計,C語言網路程式設計
路由器本身不具備資料儲存能力。通常,路由器的功能是埠 在路由器建立埠對映 公網某埠和內網某臺電腦的某埠關聯 後,外網電腦才能和內網某電腦進行通訊,通訊過程中路由器一直負責資料的中轉。但內網電腦一旦關閉連線,路由器是無法單獨收取並儲存資訊的,它會直接把斷連事件通知給連線的另一端 外網某電腦 例如你的情...