SAS插入列以获得动态确定的级别

时间:2015-11-25 17:23:50

标签: sas

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

Level 列添加到TREE,以使其成为FINAL_TREE,其工作方式如下:任何给定的树必须具有 Apple 的数字,该数字大于或等于< em> Apple_Req 用于给定的级别,以及 Orange 大于或等于 Orange_Req 。因此, Tree 会被赋予 Level ,以满足所有给定的要求。

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

TREE

LEVEL

FINAL_TREE

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

1 个答案:

答案 0 :(得分:2)

事实上,这在SAS中要容易得多 - 部分是因为有不同方法的批次

最直接的可能是使用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转换值,然后像在Excel中一样使用min。基本上,这将取代您的index

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

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