【问题标题】:SAS calculations in datastep数据步中的 SAS 计算
【发布时间】:2016-12-13 15:19:49
【问题描述】:

我读了很多关于第一个的。最后。 SAS中的函数和基本计算,尽管我想在数据步中规避以下问题(如果可能的话):

我需要标记每个方向上超过第 25 个百分位的每个观察值。 IE。我想计算异常值并给它们一个 1 或 0(异常值与否)。我遇到的问题是我想为数据集中的一组/类观察做这件事。

Group Value OutlierFlag
a    1     1
a    10    0
a    11    0
a    400   1
b    2     0
b    2     0
b    500   1

为了复杂化/提前:我需要添加一个时间网格,这意味着我需要每分钟对所有观察值求和并将值写到一种网格上(当前观察值不在指定的时间间隔内)。我已经制作了网格(分钟步骤)。但是我如何总结观察结果并将它们包含在每分钟观察的网格数据步骤中? 如果这太模糊了,我很抱歉,但也许你们中的一个人知道如何做到这一点或有一个想法。非常感谢!

最好的!

编辑:

好的,我测试了:

proc means data = MM.Data median P25 P75; 
class Security;
ods output Summary=mm.Data_median; 
var price spread; run; 

data mm.data; set mm.Data_median;
run; 

这基本上给了我 Proc 意味着输出。但我想要填充 p25 和 p75 变量的原始数据集。 然后我尝试了:

proc sql; 
create table mm.newData as select *, sum(spread) as sumspread 
from mm.Data 
group by RIC; quit; 

但是它先是再分组,然后就没有P25功能了(我只是出于试用的原因输入了sum)。

【问题讨论】:

  • 请发布您尝试过的内容。 First/Last 不适合这个问题,但是很可能需要使用 BY 组。如果没有好的数据样本、预期的输出以及您尝试过的内容,我们会猜测太多东西。
  • 嗨 Reeza,感谢您的回答。好吧,我尝试了 Proc SQL,但显然没有 P25 或类似功能。然后我用 P25 和 P75 尝试了 Proc Means,但它折叠了我不想要的数据。 - 我可以将 Proc 表示输出附加到原始数据集并获取计算所需的值吗?
  • 请发布您尝试过的问题。如果您有 SAS 9.4,它可能支持分位数函数。否则,proc 方法是执行此操作的常用方法。
  • 刚刚做了,抱歉!
  • 您必须将 proc 表示输出与原始数据集合并。单次遍历数据集是不可能计算百分位数的。

标签: sas dataset


【解决方案1】:
  • 将 STACKODS 和 NWAY 选项添加到 Proc 装置。这仅计算在 最高级别(即仅在组级别)并保持数据范围广泛。
  • 使用 BY Group 合并

    proc means data=sashelp.class nway stackods median p25 p75;
        class sex;
        var weight;
        ods output summary=stats;
    run;
    
    proc sort data=sashelp.class out=class;
        by sex;
    
    data want;
        merge class stats (keep=sex median p25 p75);
        by sex;
        flag_p75=ifn(weight>p75, 1, 0);
    run;
    

【讨论】:

  • 太棒了,非常感谢!!像魅力一样工作,NWAY 和 STACKODS 非常有用
猜你喜欢
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2023-03-10
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多