sas - proc stdize 产生错误的百分位数值
问题描述
我有一个像这样的数据集
data test;
do i = 1 to 100;
x1 = ceil(ranuni(0) * 100);
x2 = floor(ranuni(0) * 1600);
x3 = ceil(ranuni(0) * 1500);
x4 = ceil(ranuni(0) * 1100);
x5 = floor(ranuni(0) * 10);
output;
end;
run;
data test_2;
set test;
if mod(x1,3) = 0 then x1 = .;
if mod(x2,13) = 0 then x2 = .;
if mod(x3,7) = 0 then x3 = .;
if mod(x4,6) = 0 then x4 = .;
if mod(x5,2) = 0 then x5 = .;
drop i;
run;
我计划计算多个百分位数,包括两个非标准百分位数(第 2.5 和第 97.5)。我使用 proc stdize 执行此操作,如下所示
PROC STDIZE
DATA=test_2
OUT=_NULL_
NOMISS
PCTLMTD=ORD_STAT
pctldef=3
OUTSTAT=STDLONGPCTLS
pctlpts=(2.5 5 25 50 75 95 97.5);
VAR _NUMERIC_;
RUN;
比较 proc 意味着
DATA TEST_MEANS;
SET TEST_2;
IF NOT MISSING(X1);
IF NOT MISSING(X2);
IF NOT MISSING(X3);
IF NOT MISSING(X4);
IF NOT MISSING(X5);
RUN;
PROC MEANS
DATA=TEST_MEANS NOPRINT;
VAR _NUMERIC_;
OUTPUT OUT=MEANSWIDEPCTLS P5= P25= P50= P75= P95= / AUTONAME;
RUN;
但是,与 SAS 如何将缺失值标记为 -inf 有关,当我将上面的结果与 excel 和 proc 中产生的结果进行比较时,意味着它们没有对齐,有人可以确认哪个是正确的吗?
解决方案
您在 PROC STDIZE 中使用 pctldef=3,但 PROC MEANS 的默认定义是 5。我使用 PROC MEANS 用 PCTLDEF=3 测试了您的代码并获得了匹配的结果。
推荐阅读
- python - 如何在 Python 中附加数据框?
- reactjs - 如何渲染相同的组件但具有初始状态(有条件地)?
- ios - 通知在 ios 上不起作用-flutter firebase 消息传递
- sql - SQL中的存储过程检查索引是否存在然后创建
- php - Laravel 路由解析自定义数据类型
- java - 当一个类或接口充当自己的工厂时,是否有选择工厂方法名称的约定/最佳实践?
- android - 华为P20上的安卓图标渲染很奇怪
- java - 从数据库中检索一个值并将其设置为 Spring boot 中的 @Table Name 值
- c# - 托管在 Kestrel (AspNet Core 5.0) 中的 SignalR 服务的 Windows 身份验证
- glsl - 在 Vulkan 中使用 debugPrintfEXT