나는 accrual_date, absence_type, employee_id 및 duration_days가 포함 된 테이블을 가지고 있습니다.proc sql을 사용하는 조건부 합
accrual_date absence_type duration_days employee_id
01JAN2001:00:00:00 010 10.20 1
01JAN2001:00:00:00 014 11 1
01JAN2002:00:00:00 015 30 2
01JAN2001:00:00:00 015 20 2
부재 중 유형에 대한 기간 당 duration_days를 합한 쿼리를 만들고 싶습니다.
proc sort data=sort_second out=test1 nodupkey;
by emplid;
quit;
하지만이 코드가하는 것입니다 :
proc sql;
create table sort_second as
select
case when absence_type='014' then sum(duration_days) else . end as duration_days_014,
case when absence_type='015' then sum(duration_days) else . end as duration_days_015,
case when absence_type='010' then sum(duration_days) else . end as duration_days_010,
employee_id, absence_type
from sort_first
group by emplid;
quit;
그런 다음 중복 키를 제거 :
employee_id duration_days_010 duration_days_014 duration_days_015
1 10.20 11 .
2 . . 50
은 employee_id입니다 당 duration_daysper의 absence_type을 포함하는 열을 추가 : 같은 결과는해야한다 그것이 014 또는 015 또는 010 인 것을 무시하고 모든 직원에게 추가하십시오. 좋아요 :
employee_id duration_days_010 duration_days_014 duration_days_015
1 21.20 21.20 .
2 . . 50
무엇이 잘못되었는지 친절히 조언합니다. 미리 감사드립니다.
효과가 있습니다. 무리 감사! :) SAS 도구에서 더 많은 것을 배우기를 바랍니다. –
PROC SQL에서 부울 (1 또는 0)을 사용하여'sum (duration_days * (휴면 _ 유형 = 14))을 duration_14'처럼 조건부로 합계 할 수 있습니다. 'absence_type = 14'비트는 참이면 1로, 거짓이면 0으로 해석됩니다. 같은 것에 관해서, 나는 SQLs가 끔찍한 'CASE'보다 더 읽기 쉽다고 생각한다. –
확실히 작동합니다. 나는 코드의 다른 독자들에게 그것이하는 일을 명확하게하기 때문에, 그 끔찍 함에도 불구하고, 케이스를 선호하는 경향이 있습니다. 불행히도 등호는 쉽게 놓칠 수 있습니다. – Joe