【问题标题】:SAS SD and PercentilesSAS SD 和百分位数
【发布时间】:2015-05-14 01:55:19
【问题描述】:

我正在用 SAS 编写公式。我需要在所有这些中使用标准偏差和百分位数。但我不确定如何在 SAS 中编写它。

data test;
set test1;
if ((the 100th percentile of X)-(99th percentile of X))>(SD of X) then delete;
run;

我只是不确定如何在 SAS 中写出来

【问题讨论】:

  • 您手头有数据样本吗?这真的很有帮助。第 100 个百分位,这是一个最大值,对吧?您是否要删除异常值?
  • 我没有公开的数据样本 :( 我正在尝试找到一个变量的异常值,该变量具有 100k+ 观察值和大约 10-100 个可能的异常值。
  • 是的,100 是 Max……我只是在读取 SAS 单变量输出
  • 你想用这个公式做什么?您是要删除特定变量(整列)还是仅删除特定行?照原样,您的条件对于所有行都是相同的,并且会(输出所有行)或(删除所有行)。

标签: sas


【解决方案1】:

百分位数和标准差是整个数据的特征,而不仅仅是一个观察值。您的逻辑似乎表明您将删除所有观察结果。大概您实际上想将每个观察结果与分布的某些特征进行比较。

基本方法是将所需的百分位数和标准差作为新变量添加到数据中。您可以使用proc univariateoutput 语句来计算您感兴趣的统计数据并将它们保存到新数据集。

然后您将其合并回原始数据,因此您现在将拥有所需的变量。到那时,您就可以使用基本相同的语法了。

这应该让你开始:

data tmp;
    do i=1 to 100;
        x=rannor(123);
        output;
    end;
run;

proc univariate data=tmp noprint;
    var x;
    output out=pctls max=max p99=p99 std=std;
run;

data tmp;
    if _n_=1 then do;
        set pctls;
    end;
    set tmp;

    /* Just making up a condition here */
    if x>p99 then delete;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多