SAS数据步By-Group语句
(2014-05-21 15:24:45)
标签:
sasby-group |
分类: SAS学习 |
options pageno=1 nodate linesize=80
pagesize=60;
data
salaries;
input Department $ Name $ WageCategory $
WageRate;
datalines;
BAD Carol Salaried 20000
BAD Elizabeth Salaried 5000
BAD Linda Salaried 7000
BAD Thomas Salaried 9000
BAD Lynne Hourly 230
DDG Jason Hourly 200
DDG Paul Salaried 4000
PPD Kevin Salaried 5500
PPD Amber Hourly 150
PPD Tina Salaried 13000
STD Helen Hourly 200
STD Jim Salaried 8000
;
proc print data=salaries;
run;
proc sort data=salaries
out=temp;
by Department;
run;
data budget (keep=Department
Payroll);
set
temp;
by Department;
if WageCategory='Salaried' then
YearlyWage=WageRate*12;
else if WageCategory='Hourly' then
YearlyWage=WageRate*2000;
if
first.Department then
Payroll=0;
Payroll+YearlyWage;
if last.Department;
run;
proc print
data=budget;
format Payroll dollar10.;
title 'Annual Payroll by Department';
run;
Output from Conditional BY-Group Processing
Annual Payroll by Department
Obs Department Payroll
1 BAD $952,000
2 DDG $448,000
3 PPD $522,000
4 STD $496,000
二、数据不是按照字母或者数字排序
在进行BY-Group处理操作时,不仅可以利用按照字母或者数字排序的数据,还可以按照日历月份或者分类等排列的数据。只需要在你使用SET语句时,在By语句后面加个Notsorted选项即可。Notsorted选项的作用就是告诉SAS数据不是按照字母或者数字大小排序的,而是按照By变量的值按组排列的。
Notsorted选项不能用在Merge语句、Upgrade语句,或者当SET语句后多于一个数据集的时候。
下面的例子假定数据是按照字符变量Month分组的,IF语句根据Last.Month的值有条件的写记录到数据集。数据步只会在每个By组处理完后写记录到数据集。
data total_sale(drop=sales);
set region.sales
by month notsorted;
total+sales;
if last.month;
run;

加载中…