在SAS中存储Proc均值变量

时间:2013-06-06 06:28:43

标签: sas

    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的片段。

请帮助我,并原谅我糟糕的词汇。

3 个答案:

答案 0 :(得分:1)

你需要:

  1. segment
  2. 对源数据集进行排序
  3. 使用 NWAY 选项消除MEANS输出数据集中的“总计”观察结果( _ TYPE _ = 0)。
  4. 将输出数据集合并回源。
  5. 因此,一个完整的解决方案应该是这样的:

    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