用于动态确定的级别的SAS insert列

用于动态确定的级别的SAS insert列,sas,Sas,我正在尝试将SAS设置为可以在Excel中轻松完成的操作,但无法找到有效的方法。考虑到这里显示的前两个表(分别称为TREE和LEVEL),我试图以第三个表(FINAL_TREE)结束 将Level列添加到TREE中,使其成为FINAL_TREE的工作方式如下:对于给定的级别,任何给定的树都必须有一个大于或等于Apple_Req的数字Apple,以及大于或等于Orange_Req的橙色。因此,一棵树被赋予一个满足所有给定需求的级别 因此,在示例表中,Tree3被指定为Level1,尽管事实上,如果

我正在尝试将SAS设置为可以在Excel中轻松完成的操作,但无法找到有效的方法。考虑到这里显示的前两个表(分别称为TREE和LEVEL),我试图以第三个表(FINAL_TREE)结束

将Level列添加到TREE中,使其成为FINAL_TREE的工作方式如下:对于给定的级别,任何给定的树都必须有一个大于或等于Apple_Req的数字Apple,以及大于或等于Orange_Req的橙色。因此,一棵树被赋予一个满足所有给定需求的级别

因此,在示例表中,Tree3被指定为Level1,尽管事实上,如果不是因为它的橙色计数低,它很容易成为Level3


在Excel中,这可以使用索引和查找两个匹配函数的最小值来完成,但我认为这不能直接转换为SAS。我想有一种方法可以使用明确定义的嵌套IF语句来设置它,但我希望有一种解决方案可以处理任意级别的级别表(只要需求设置正确)。

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

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

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;
您还可以直接从数据集生成格式-例如,请参见
PROC format
上的
CNTLIN
选项

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