SAS(十一)DATA步--信息語句

SAS(十一)DATA步--信息語句

數組(array)語句

  • 當需要用同一種方法處理很多變量時,可以用數組語句定義這組變量爲某個數組中的元素。
  • 1.顯示下標array語句:由一個數組名字,在數組中元素個數的說明,及元素列表組成。
  • 2.隱含下標array語句:由一個數組名字、一個下標變量和列表名組成。
  • 形如:
ARRAY array-name {subscript} <$> <<array-elements><(initial-values)>>
例   array simple{3} red green yellow;
      array x{5,3} score1-score15;
      array c{3}
等價於array c{3} c1-c3
  array test{3} t1 t2 t3 (90 80 70)
數組中的變量必須全是數值型或字符串型,array
  • 規定數組中每一維的上下界:

array x{1:5,1:3} score1-score15;

  • {*}表示SAS系統通過數組中變量的個數來確定下標。可用dim(數組名)函數計算數組元素個數。
  • _temporary_建立一個臨時數組元素列表

 

data zz;                                                                                                                                
     input d1-d7;                                                                                                                       
         array day(*) d1-d7;                                                                                                            
         do i=1 to dim(day);                                                                                                            
            day(i)=day(i)+10;                                                                                                           
         end;                                                                                                                           
         drop i;                                                                                                                        
     cards;                                                                                                                             
99  11   22   222     22   3  44                                                                                                        
1 2 3 4 5 6 7                                                                                                                           
;                                                                                                                                       
run;                                                                                                                                    
PROC PRINT;RUN;

 

 

data a;                                                                                                                                 
input x1-x5;                                                                                                                            
cards;                                                                                                                                  
1 2 3 4 5                                                                                                                               
2 3 4 5 6                                                                                                                               
4 5 6 7 8                                                                                                                               
;                                                                                                                                       
run;                                                                                                                                    
data b;                                                                                                                                 
set a;                                                                                                                                  
array test(5) x1-x5;                                                                                                                    
prod=0;                                                                                                                                 
do i=1 to dim(test)-1;                                                                                                                  
  if i=1 then prod=test(i);                                                                                                             
  prod=prod*test(i+1);                                                                                                                  
end;                                                                                                                                    
proc print;                                                                                                                             
run;

 

 

data a;                                                                                                                                 
input var1 var2 var3;                                                                                                                   
cards;                                                                                                                                  
10 20 30                                                                                                                                
100 . 300                                                                                                                               
. 40 400                                                                                                                                
;                                                                                                                                       
run;                                                                                                                                    
                                                                                                                                        
data b(drop=i);                                                                                                                         
set a;                                                                                                                                  
array array1(3) _TEMPORARY_ (.1 .2 .3) ;                                                                                                
array array2(3) var1 var2 var3;/*把a數據集中的多個變量用數組來表示*/                                                                    
 do i=1 to 3;                                                                                                                           
  if array2(i)=. then array2(i)=array1(i);                                                                                              
 end;                                                                                                                                   
proc print;                                                                                                                             
run;

 

 

  • 形如:ARRAY array-name <(index-variable)> <$> array-elements <(initial-values)>
  • 如果沒有規定下標變量,SAS系統使用自動變量_i_作爲下標變量,下標變量範圍從1到這個數組元素的個數

如:array x x1-x5

 

data test;                                                                                                                              
  input sco1-sco5;                                                                                                                      
  array s sco1-sco5;                                                                                                                    
  do _i_ =1 to 5;                                                                                                                       
    s=s*100;                                                                                                                            
  end;                                                                                                                                  
  cards;                                                                                                                                
  0.95 0.88 0.57 0.90 0.65                                                                                                              
  1 2 3 4 5                                                                                                                             
  ;                                                                                                                                     
  run;                                                                                                                                  
PROC PRINT;RUN;

 

 

Do over語句

  • Do over 語句對每個數組元素自動地執行Do組中的語句,它等價於 do i=1 to k;

其中i是這個數組的下標變量,k是數組元素的個數。

  • Do over語句常用在對隱含下標數組元素執行Do組裏的語句
data test;                                                                                                                              
  input sc01-sc05;                                                                                                                      
  array s sc01-sc05;                                                                                                                    
  do over s;                                                                                                                            
    s=s*100;                                                                                                                            
        end;                                                                                                                            
        cards;                                                                                                                          
        0.95 0.88 0.57 0.90 0.65                                                                                                        
        1 2 3 4 5                                                                                                                       
        ;                                                                                                                               
PROC PRINT;                                                                                                                             
RUN;

 

 

Informat語句

  • Informat語句把輸入格式與變量聯繫起來,在data步,可以用informat語句對input語句中列出的變量規定缺省時的輸入格式
data infex;                                                                                                                             
     informat default=3.1 default=$char4. x1 2.2;                                                                                       
/*數值的輸入格式忽略w.d格式中w的值*/                                                                                                    
     input x1-x5 name $;                                                                                                                
         file print;                                                                                                                    
         put x1-x5 name;                                                                                                                
         cards;                                                                                                                         
1111  22   33   4444  100 Johnny                                                                                                        
;                                                                                                                                       
run;

 

 

Format語句 

  • data步把變量同輸出格式聯繫起來
  • 可以規定缺省選項,如:
format default=8.2;

 

data;                                                                                                                                   
informat a dollar9.;/*必須指定,否則不能識別數據*/                                                                                      
format a comma9.;                                                                                                                       
input a @@;                                                                                                                             
cards;                                                                                                                                  
$1900000                                                                                                                                
;                                                                                                                                       
run;                                                                                                                                    
proc print;                                                                                                                             
run;

 

data ff;                                                                                                                                
     format header $7. name $8.;                                                                                                        
         input header= name=;                                                                                                           
         cards;                                                                                                                         
header=zxs zjy   name=zhou aaa                                                                                                          
header=123 name=aaa                                                                                                                     
;                                                                                                                                       
run;                                                                                                                                    
proc print;                                                                                                                             
run;

 

Drop和keep語句

  • Drop語句:刪掉變量語句

drop variable-list

  • Keep語句:保留變量語句

keep variable-list

  • 雖然出現在dropkeep語句中的變量不包含在正被創建的SAS數據集中,但這些變量仍可以用在程序語句中
  • Dropkeep不能同時使用

 

Retain語句 

  • 使用retain給變量賦予初值,並保留到讀下一個觀測
retain month1-month5 1
retain var1-var4 (1,2,3,4)

retain後無變量時,用input或賦值語句創建的所有變量的值,保留上次data步執行的值

 

data retire;                                                                                                                            
  input amount @@;                                                                                                                      
  retain year 1994 total 0;                                                                                                             
  year=year+1;                                                                                                                          
  total=total+amount;/*total=sum(total,amount)*/                                                                                        
  /*可用下列語句代替                                                                                                                    
  retain year 1994;                                                                                                                     
  year+1;                                                                                                                               
  total+amount;*/                                                                                                                       
  cards;                                                                                                                                
  500 1000 1500 2200 2700                                                                                                               
  ;                                                                                                                                     
  run;                                                                                                                                  
  proc print;                                                                                                                           
  run;

 

data group;                                                                                                                             
  input x;                                                                                                                              
  retain;                                                                                                                               
  if x=1 then sex='M';                                                                                                                  
  if x=2 then sex='F';                                                                                                                  
cards;                                                                                                                                  
1                                                                                                                                       
2                                                                                                                                       
3                                                                                                                                       
2                                                                                                                                       
;                                                                                                                                       
run;                                                                                                                                    
proc print;                                                                                                                             
run;

 

 

Attrib語句

  • data步內允許用一個attrib語句來規定一個或幾個變量的輸出、輸入格式,標籤和長度,即規定變量屬性
  • Attrib x  label=中國載人飛船
              length=4
              informat=8.5
              format=8.2;
 

 

data a;                                                                                                                                 
  input x @@;                                                                                                                           
  attrib x label='中國載人飛船'                                                                                                         
           length=8                                                                                                                     
           informat=comma8.                                                                                                             
           format=dollar12.;                                                                                                            
cards;                                                                                                                                  
12,345,678                                                                                                                              
;                                                                                                                                       
run;                                                                                                                                    
proc print;                                                                                                                             
run;

 

 

Window語句

  • 創建用戶專用的窗口,可用來顯示文字說明或接受輸入的數據
data _null_;                                                                                                                            
   window start                                                                                                                         
     #5 @26 'welcome to the sas system' color=yellow                                                                                    
         #7 @19 'this program creates two sas data sets'                                                                                
         #8 @26 'and uses three procedures'                                                                                             
         #12 @27 'press enter to continue';                                                                                             
   display start;                                                                                                                       
   stop;                                                                                                                                
run;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章