SAS加入标志以指示百分位数

时间:2019-05-27 11:53:26

标签: sas left-join sas-macro percentile do-loops

我希望将两个表连接在一起

表1-棒球数据集

DATA baseball;
    SET sashelp.baseball
        (KEEP = crhits);
RUN;

表2-包含CRhits百分位数的表

PROC STDIZE 
    DATA = baseball
    OUT=_NULL_      
    PCTLMTD=ORD_STAT
    PCTLDEF=5
    OUTSTAT=STDLONGPCTLS
        (WHERE = (SUBSTR(_TYPE_,1,1) = "P"))
    pctlpts = 1 TO 99 BY 1;
RUN;

我想将这些表连接在一起,以创建一个包含击键值的表,然后再创建一列,确定该值属于哪个百分位,如下所示

crhits    percentile    percentile_value
54        p3            54
66        p5            66
825       p63           825
1134      p76           1133

最后一列表示由stdlongpctls给出的百分数值

我目前使用以下代码计算百分位数,并使用一个循环来计算每个百分位数,每个因素的“事件”数量

我尝试了交叉联接,但是在可视化如何在没有显式键的情况下联接这两个表时遇到了困难

PROC SQL;
    CREATE TABLE cross_join_table   AS
    SELECT
          a.crhits
        , b._TYPE_
        , CASE WHEN
            a.crhits < b.type       THEN b._TYPE_   END AS percentile
    FROM
        baseball                    a
    CROSS JOIN
        stdlongpctls                b;
QUIT;

如果还有另一种更简单/更有效的方法来查找观测值和因变量的数量(例如,我在实际数据集中的默认标志事件上建模,那么每个百分位数组的总和为1,我将不胜感激它)

1 个答案:

答案 0 :(得分:0)

改为使用PROC RANK将其分组为百分位数。

proc rank data=sashelp.baseball out=baseball_ranks group=100;
var crhits;
rank rank_crhits;
run;

然后您可以使用PROC MEANS对其进行总结。