0

我有一个像这样的数据集

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 中产生的结果进行比较时,意味着它们没有对齐,有人可以确认哪个是正确的吗?

4

1 回答 1

1

您在 PROC STDIZE 中使用 pctldef=3,但 PROC MEANS 的默认定义是 5。我使用 PROC MEANS 用 PCTLDEF=3 测试了您的代码并获得了匹配的结果。

于 2018-11-18T16:11:13.170 回答