Sql SAS从一行计算多个新变量
我有一个数据集,如下所示:Sql SAS从一行计算多个新变量,sql,sas,multiple-columns,calculated-columns,Sql,Sas,Multiple Columns,Calculated Columns,我有一个数据集,如下所示: 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]\u A 如果V2大于4,则ERR_
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]\u A
- 如果V2大于4,则ERR_CODE=B和ERR_DETAIL=“Check Log”和ERR_ID=[ID]\B
- 如果V3大于4,则ERR_CODE=C和ERR_DETAIL=“Fault”和ERR_ID=[ID]\u 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。我尝试过循环、数组、if语句和case-when,但它自然会跳到下一行来计算何时满足条件。但我想计算每行的其他满足条件
我已经设法做到这一点,为每个条件创建单独的表,然后合并它们。但如果有很多条件可以合作的话,这似乎不是一个有效的方法
我的问题是,如何在不单独计算的情况下,一次计算每个ID的其他满足条件?输出表的行数将超过预期的输入,但对我来说,不可能通过应用case-when或if等实现
提前感谢,如果我不清楚,请道歉。只需使用if/THEN/DO块即可。添加输出语句,为每个错误写入新的观察值
data have ;
input ID $ V1-V3;
cards;
01 5 3 7
02 3 8 5
03 6 9 1
;
data want;
set have;
length ERR_CODE $1 ERR_DETAIL $20 ERR_ID $10 ;
if v1>4 then do;
err_code='A'; err_detail="Out of range"; err_id=catx('_',id,err_code);
output;
end;
if v2>4 then do;
err_code='B'; err_detail="Fault"; err_id=catx('_',id,err_code);
output;
end;
if v3>4 then do;
err_code='C'; err_detail="Check Log"; err_id=catx('_',id,err_code);
output;
end;
drop v1-v3 ;
run;
结果:
Obs ID ERR_CODE ERR_DETAIL ERR_ID
1 01 A Out of range 01_A
2 01 C Check Log 01_C
3 02 B Fault 02_B
4 02 C Check Log 02_C
5 03 A Out of range 03_A
6 03 B Fault 03_B
使用
输入代码如果
或数组执行-这两种方法中的任何一种都可能是正确的方法,您只需稍微调整一下即可。一旦你这么做了,我们可以帮你。(case when
不适用于多个测试,因此我不会这样做。)无论您喜欢哪种方法。当您想从输入行创建多个输出行时,您需要编写显式的output
语句。