proc means data=har.&seg_cell n mean std p1 p50 p99;
class segment;
var txn tpv;
output out=stat_1 (drop = _TYPE_ _FREQ_)
P1(txn)=txn_P1_T P1(tpv)=tpv_P1_T
P99(txn)=txn_P99_T P99(tpv)=tpv_P99_T
;
where POS_flag = &POS and cell=&gcell;
title "Stat Summary - Test_POS";
run;
data har.&seg_cell;
if _N_=1 then set stat_1;
set har.&seg_cell;
run;
我想将TXN和TPV段的P1 P50 P99(段有10个不同的名称)保存到单独的变量中。但是,当我运行此代码时,只有整个(所有段)P1 P50 P99被存储为所有行。
我想要的是取决于应该添加特定P1 P50 P99的片段。
请帮助我,并原谅我糟糕的词汇。
答案 0 :(得分:1)
你需要:
segment
MEANS
输出数据集中的“总计”观察结果( _ TYPE _ = 0)。因此,一个完整的解决方案应该是这样的:
proc sort data=har.&seg_cell;
by segment;
run;
proc means nway data=har.&seg_cell n mean std p1 p50 p99;
class segment;
var txn tpv;
output out=stat_1 (drop = _TYPE_ _FREQ_)
P1(txn)=txn_P1_T P1(tpv)=tpv_P1_T
P99(txn)=txn_P99_T P99(tpv)=tpv_P99_T;
where POS_flag = &POS and cell=&gcell;
title "Stat Summary - Test_POS";
run;
data har.&seg_cell;
merge har.&seg_cell stat_1;
by segment;
run;
答案 1 :(得分:0)
尝试使用by segment
代替class
。请注意,您必须先按segment
对数据集进行排序。
答案 2 :(得分:0)
如果您希望将每个segment
的摘要数据合并到正确的行中,则需要执行merge by
而不是使用if _N_=1
。