SAS 分組與排序


SAS 分組與排序

SAS對數據集進行操作時,經常需要在SET、MERGE、MODIFY或 UPDATE語句中使用分組數據。使用分組數據最基本的方法是使用BY 語句,其基本形式如下:

BY  變量列表;

BY語句除了可用於DATA步中對數據集進行操作外,也可以用於 SAS PROC步。在這些地方使用分組數據時,要求所有的觀測必須按BY 語句中的變量以數字或字符順序升序或降序排列,或者以某種方式分 組,例如以日歷的月份或格式化后的值為條件進行分組。如果數據不滿 足這個條件,可使用SORT過程對其進行排序分組。

1.使用SORT過程對觀測進行排序

使用SORT過程的基本形式如下:

PROC  SORT  DATA=輸入數據集  <OUT=輸出數據集>   <其他選項>; 
BY  變量列表;
RUN;
  • ·輸入數據集指定需要排序的數據集。
  • ·變量列表指定排序變量,可以是一個變量或多個變量。當指定多個變量時,SAS首先會按照第一個變量分組,然后在同一個分組內依照 變量列表中的其他變量逐個進行排序。
  • ·選項OUT=指定存儲排序后數據的新數據集。當該選項不存在時, 排序生成的數據寫入由選項DATA=指定的數據集。輸出數據集可以和 輸入數據集相同,不過此時會覆蓋輸入數據集。當輸出數據集與輸入數 據集不同時,會創建新數據集。
  • ·還可以指定其他選項。
  • 默認情況下,SAS根據BY變量的值升序排列分組。

 

 

對公司員工先按照部門(Dept)名稱進行排序,在同一部門里按照入職日期(Entry_Date)進行排序。

公司員工所在數據集saslib.employee的部分數據如圖3.13所示。該數據集包含員工編號、姓名、所在部門、職位和入職年份。使用SORT過程對該數據集進行排序時,在BY語句中先后指定排序的變量Dept和Entry_Date。

proc  sort  data=saslib.employee  out=saslib.employee_sorted;
by   Dept  Entry_Date;
run;

2.使用選項DESCENDING對觀測按變量降序排序

BY語句中,還可以在每個變量之前指定選項DESCENDING對變 量進行降序排序,或者根據需要對部分變量進行升序排序、部分變量降 序排序。其基本形式如下:

BY  <DESCENDING  >  變量1  <<  DESCENDING  >  變量2...>;

如果變量前面存在選項DESCENDING,則該變量在組內按降序排序,否則按默認的升序排序。

saslib.employee中的員工數據按部門名稱進行排序(升序),每個部門內部的入職日期由近到遠進行排序(降序)。代碼 如下:

proc  sort  data=saslib.employee  out=saslib.employee_descending;
by Dept  descending  Entry_Date;
run;

3.找到分組中的第一個和最后一個觀測

在使用BY語句時,SAS會自動為BY語句中指定的每個變量生成兩個臨時變量:FIRST.BY變量和LAST.BY變量。當變量值在每個分組中第一次出現時,FIRST.BY變量為1,否則為0;當變量值在每個分組中 最后一次出現時,LAST.BY變量為1,否則為0。通過這兩個變量可以找到分組中的第一個和最后一個觀測,並進行相應的處理。在DATA步中 使用SET語句和BY語句的基本形式如下:

DATA  數據集;
SET  數據集;
BY  變量列表;
...其他語句;
RUN;

取排序生成的saslib.employee_sorted中每個部門最先入職和最后入職的員工,生成新數據集saslib.employee_fl。

代碼如下:

data  work.employee_fl;
set  saslib.employee_sorted;
by   Dept;
if first.Dept  or  last.dept;
run;
proc  print  data=work.employee_fl  noobs;
run;

4.使用選項NODUPKEY刪除重復BY變量的觀測

使用SORT過程的NODUPKEY可以在對數據集按BY變量進行排序 的同時,刪除數據集中BY變量值相同的觀測。

proc  sort  data=saslib.contact2_raw out=saslib.contact2 dupout=work.contact2_dup nodupkey;
by   Name;
run;
proc  print  data=saslib.contact2  noobs;
title  "Observations  with  Duplicate  BY  Values  Deleted";
run;
proc  print  data=work.contact2_dup  noobs;
title  "Duplicate  Observations";
run;

 

在SAS 分組與排序過程中,需要掌握得關鍵詞為:

proc sort data=work.dataone out=datause uniqueout=uniquedata;  
by  var1 descend var2;   
first.var1 or last.var1;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM