我正在使用proc tabulate创建一堆频率表,并且我必须根据关于数据集中每个人的年龄的一组权重来加权百分比。我的问题是,权重似乎对我的结果有影响。我知道,我可以使用proc freq来做到这一点,但是我的表相当详细,因此我使用proc制表。
我提供了一个数据集示例,以及到目前为止我已经尝试过的示例:
private static final String ACCEPT_AUTH_APPLICATION_MSG = "lorem ipsum " +
"lorem ipsum.\n\n" +
"lorem ipsum:\n"(below my unordered list with dots)
我知道结果应该就是那个应用。 46,2%的男孩回答“否”和应用。当我包括权重时,有53.8%的人回答是,但是proc列表的输出给我的男孩中有40%否,有60%是。 我做错了什么?
答案 0 :(得分:2)
WEIGHT
语句将影响VAR
变量值,而不是N计数。 PCT<N>
是计数的百分比。 “ FREQ”语句将导致基于另一个变量的数据点内部重复,从而影响N计数,但是FREQ不适用于小数重复(值),并且会四舍五入。
从帮助中
FREQ变量;
指定一个数字变量,其值表示观察的频率。如果使用FREQ语句,则该过程假定每个观察值表示n个观察值,其中n是变量的值。如果n不是整数,则SAS将其截断。如果n小于1或丢失,则该过程不使用该观察值来计算统计量。
频率变量的总和表示观测的总数。
WEIGHT变量;
指定一个数字变量,其值加权分析变量的值。变量的值不必是整数。 PROC TABULATE根据下表响应重量值。
体重值:PROC TABULATE响应
- 0:将观察数计入观察总数
- <0:将值转换为零,并将观测值计入观测总数
- 。 :不包括观察结果
如果您想对pctN像计数一样使用权重,请创建要加权的unity
变量和PCTSUM
Data have;
input gender wgt q1 year;
unity = 1;
lines;
0 1.5 0 2014
0 1 1 2014
0 1.5 1 2014
0 1 1 2014
0 1.5 0 2014
1 1 1 2014
1 1 1 2014
1 1 1 2014
1 1 0 2014
1 1 1 2014
1 1 1 2014
;
run;
Proc tabulate data=have;
title "Unity weighted";
class gender q1 year;
format gender gender. q1 q1f.;
var unity; %* <----------;
weight wgt;
table gender*unity, year*q1; %* <---- debug, the count 'basis' for PCTSUM<q1> ;
table gender*unity*(pctsum<q1>), year*q1; %* <--- weighted unity PCTSUM;
run;