【问题标题】:SAS insert column for dynamically determined levels用于动态确定级别的 SAS 插入列
【发布时间】:2015-11-25 17:23:50
【问题描述】:

我正在尝试设置 SAS 来做一些我可以在 Excel 中轻松完成的事情,但我无法找到有效的方法。鉴于此处显示的前两个表(分别称为 TREE 和 LEVEL),我试图以第三个表(FINAL_TREE)结束。

Level 列添加到 TREE,使其变为 FINAL_TREE 的工作方式如下:任何给定的树必须有一个大于或等于 Apple 的数字em>Apple_Req 对于给定的 Level,以及大于或等于 Orange_ReqOrange。因此,Tree 被赋予了一个 Level,它满足所有给定的要求。

所以在示例表中,Tree3 被赋予 Level1,尽管如果不是因为它的低 Level3,它很容易成为 Level3 em>橙色计数。

在 Excel 中,这可以使用 INDEX 并找到两个 MATCH 函数的 MIN 来完成,但我认为这不能直接转换为 SAS。我想有一种方法可以使用明确定义的嵌套 IF 语句进行设置,但我希望有一种解决方案可以处理具有任意数量级别的 LEVEL 表(只要正确设置要求)。

【问题讨论】:

    标签: sas


    【解决方案1】:

    事实上,这在 SAS 中要容易得多 - 部分原因是有很多不同的方法可以做到这一点。

    如果您熟悉 SQL,最简单的方法可能是使用 SQL。不过,与您在 Excel 中所做的最相似的是 Format,也许也是最快的。

    proc format;
      value appleF
        1-<4 = '1'
        5-<15 = '2'
        15-high='3'
      other='0';
     value orangeF
        5-<15  = '1'
        16-<30 = '2'
        30-high= '3'
      other='0';
    quit;
    

    现在,您可以使用put 转换值,然后使用min,就像在 Excel 中一样。基本上这取代了你的index

    data want;
      set have;
      level = min(put(apple,applef1.),put(orange,orangef1.));
    run;
    

    您也可以直接从数据集生成格式 - 参见 this paper 例如在 PROC FORMAT 上使用 CNTLIN 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2019-09-27
      相关资源
      最近更新 更多