我有一个数据集如下:
1 16.60 4923 1198 29663 1927 Davis California
2 10.09 3055 883 30282 1989 Palo Alto California
3 9.61 5128 1096 53388 2489 Boulder Colorado
4 8.85 4674 1210 52815 2600 Berkeley California
5 7.28 4793 1051 65794 3408 Eugene Oregon
6 6.64 5112 1215 76972 3579 Fort Collins Colorado
7 6.59 3125 1608 47451 2701 Santa Barbara California
8 6.41 2433 1078 37968 2671 Chico California
变量分别为bike_share
,total_biker
,error_biker
,total_worker
,error_worker
,city
,state
。对于这个数据集,我想计算骑自行车上班的加利福尼亚人的平均百分比(即,我想总结来自total_biker
加利福尼亚的state
并将该数字除以{{ 1}})。
首先,我想确定加利福尼亚人,所以我编写了以下total_worker
循环来查找来自加利福尼亚州的do
人数。
total_bike_cali = 0;
我= 1到8;
如果state =“California”则total_bike_cali = total_bike_cali + total_bike;
否则total_bike_cali = 0;
结束;
proc print;
运行;
然而这给了我一个错误
total_bike
对于循环的几乎每一行。有人可以告诉我我做错了吗?
答案 0 :(得分:0)
您可以通过多种方式实现这一目标。这是两个。
proc sql;
select sum(total_biker)/sum(total_worker)
from your_data
where state='California';
quit;
或
data have;
length city state $20;
input bike_share total_biker error_biker total_worker error_worker city $ state $;
datalines;
16.60 4923 1198 29663 1927 Davis California
10.09 3055 883 30282 1989 Palo Alto California
9.61 5128 1096 53388 2489 Boulder Colorado
8.85 4674 1210 52815 2600 Berkeley California
7.28 4793 1051 65794 3408 Eugene Oregon
6.64 5112 1215 76972 3579 Fort Collins Colorado
6.59 3125 1608 47451 2701 Santa Barbara California
6.41 2433 1078 37968 2671 Chico California
;;;;
run;
data want;
set have end=eof;
if state='California' then do;
total_worker_cali+total_worker;
total_biker_cali+total_biker;
put _all_;
end;
if eof then do;
total_cali_pct = total_biker_cali/total_worker_cali;
output;
end;
run;
您还可以设置数据,以便PROC MEANS
或PROC TABULATE
可以为您执行此操作;如果您想要每个州,而不仅仅是一个特定的州,那将是这样做的方式。
以下是使用PROC MEANS
进行此操作的示例。这并不准确,因为bike_share
是圆的;如果你从原始变量重新计算它会更准确。
proc means data=have;
class state;
weight total_worker;
var bike_share;
run;
在这里,您使用total_worker
作为权重,将汇总数据集恢复为看起来像每个工人一行的非共享数据集。