我希望将两个表连接在一起
表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,我将不胜感激它)
答案 0 :(得分:0)
改为使用PROC RANK将其分组为百分位数。
proc rank data=sashelp.baseball out=baseball_ranks group=100;
var crhits;
rank rank_crhits;
run;
然后您可以使用PROC MEANS对其进行总结。