我正在尝试设置SAS来执行我能够在Excel中轻松完成的操作,但无法找到有效执行的方法。鉴于此处显示的前两个表(分别称为TREE和LEVEL),我试图以第三个表(FINAL_TREE)结束。
将 Level 列添加到TREE,以使其成为FINAL_TREE,其工作方式如下:任何给定的树必须具有 Apple 的数字,该数字大于或等于< em> Apple_Req 用于给定的级别,以及 Orange 大于或等于 Orange_Req 。因此, Tree 会被赋予 Level ,以满足所有给定的要求。
所以在示例表中, Tree3 被赋予 Level1 ,尽管它很容易 Level3 ,如果不是它的< em>橙色计数。
在Excel中,这可以使用INDEX并找到两个MATCH函数的MIN来完成,但我不认为可以直接转换为SAS。我想有一种方法可以使用explicilty定义的嵌套IF语句来设置它,但我希望有一个解决方案可以处理任意数量级别的LEVEL表(只要正确设置了要求)。
答案 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
选项。