-
Notifications
You must be signed in to change notification settings - Fork 78
/
DOW_datasteps.sas
134 lines (101 loc) · 2.28 KB
/
DOW_datasteps.sas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*SASGlobalForum2011*/
/*Paper 259-2011 */
/*Choosing the Road Less Traveled: Performing Similar Tasks with either */
/*SAS®DATA Step Processing or with Base SAS®Procedures */
/*Kathryn McLawhorn, SAS Institute Inc., Cary, NC */
/*1. CALCULATING THE NUMBER OF OBSERVATIONS IN A BY GROUP*/
proc sort data=sashelp.class out=class;
by age;
run;
data count1;
set class;
by age;
if first.age then Count=0;
count+1;
if last.age then output;
keep age count;
run;
proc print data=count1 noobs;
run;
/*dow*/
data count2;
do count=1 by 1 until (last.age);
set class;
by age;
end;
keep age count;
run;
proc print data=count2 noobs;
run;
/*2.COMPUTING A TOTAL FOR A BY GROUP*/
data tot;
set class;
by age;
if first.age then do;
weight_tot=0;
end;
weight_tot+weight;
if last.age then output;
keep age weight_tot;
run;
proc print data=tot noobs;
run;
/*dow*/
data tot2 ;
do count = 1 by 1 until ( last.age ) ;
set class ;
by age ;
weight_tot = sum (weight_tot, weight) ;
end ;
keep age weight_tot;
run ;
proc print data=tot2 noobs;
run;
/*3.COMPUTING AN AVERAGE FOR A BY GROUP */
data avg (keep=age count weight_tot weight_avg);
set class ;
by age ;
retain weight_tot count;
if first.age then do;
weight_tot=0;
count=0;
end;
weight_tot + weight;
count + 1;
if last.age then do;
weight_avg=weight_tot/count;
output;
end;
run;
proc print data=avg noobs;
run;
/*dow*/
data avg2 ;
do count = 1 by 1 until ( last.age ) ;
set class ;
by age ;
weight_tot = sum (weight_tot, weight) ;
end ;
weight_avg = weight_tot / count ;
keep count age weight_tot weight_avg;
run ;
proc print data=avg2 noobs;
run;
/*4. COMPUTING A PERCENTAGE FOR A BY GROUP*/
data avg2 ;
do count = 1 by 1 until ( last.age ) ;
set class ;
by age ;
weight_tot = sum (weight_tot, weight) ;
end ;
weight_avg = weight_tot / count ;
do seq = 1 by 1 until ( last.age ) ;
set class ;
by age ;
percent=weight/weight_tot;
output;
end ;
drop sex height;
run ;
proc print data=avg2 noobs;
run;