【发布时间】:2021-04-23 13:48:52
【问题描述】:
我有一个如下所列的数据集:
ID-----V1-----V2------V3
01------5------3-------7
02------3------8-------5
03------6------9-------1
我想根据某些列的行为计算 3 个新变量(ERR_CODE、ERR_DETAIL、ERR_ID)。
- 如果 V1 大于 4,则 ERR_CODE = A 且 ERR_DETAIL = “超出范围”且 ERR_ID = [ID]_A
- 如果 V2 大于 4,则 ERR_CODE = B 且 ERR_DETAIL = "检查日志" 且 ERR_ID = [ID]_B
- 如果 V3 大于 4,则 ERR_CODE = C 且 ERR_DETAIL = "Fault" 且 ERR_ID = [ID]_C
想要的输出表是这样的
ID-----ERR_CODE----ERR_DETAIL---------ERR_ID
01--------A--------Out of range---------01_A
01--------C--------Fault----------------01_C
02--------B--------Check Log------------02_B
02--------C--------Fault----------------02_C
03--------A--------Out of range---------03_A
03--------B--------Check Log------------03_B
我正在使用 SAS 9.3 和 EG 5.1。我尝试过 do-loops、数组、if 语句和 case-when,但它自然会跳到下一行来计算何时满足条件。但我想计算每一行的其他满足条件。
我设法通过为每个条件创建单独的表然后合并它们来做到这一点。但是,如果有很多条件可以使用,这似乎不是一种有效的方法。
我的问题是如何在不单独计算的情况下一次性计算每个 ID 的其他满足条件?输出表的行数将超过预期的输入,但对我来说,通过应用 case-when 或 if 等是不可能实现的。
在此先感谢,如果我不清楚,请见谅。
【问题讨论】:
-
使用
if或arrays/do输入你的代码——这两种方法都可能是正确的方法,你只需要稍微调整一下。一旦你这样做,我们可以帮助你。 (case when不适合多次测试,所以我不会走那条路。)你更喜欢哪个。 -
当您想从输入行创建多个输出行时,您需要编写显式
OUTPUT语句。
标签: sql sas multiple-columns calculated-columns