특정 조건에 따라 보존을 사용하여 변수를 요약하려고합니다. account_id, date, transaction, value 및 transaction_type 필드가 있습니다.보유 변수가 보유되지 않음
데이터는 ACCOUNT_ID 날짜 나하지 ('A')
의 첫 번째 TRANSACTION_TYPE 때까지 값을 요약 할
으로 분류되어 나는이
data dset;
set dset;
by account_id;
retain sum_flag sum;
if first.account_id then do;
sum_flag = 1;
sum=0;
end;
if transaction_type not in ('A') then sum_flag = 0;
if sum_flag = 1 then sum=sum +value;
run;
내 문제가 있습니다 A의 첫 번째 transaction_type이 잘 작동하지만 다음 transaction_type이 또한 sum_flag 인 경우. 1로 유지되는 대신에 왜 이런 일이 일어나는가?
transaction_type이 ('A')가 아니고 sum_flag = 0 인 경우 과 관련이 있다고 생각합니다. 트랜잭션이 'A'인 경우 sum_flag 변수가 누락으로 재설정되지 않지만 첫 번째 'A'트랜잭션까지 보유 된 값만 원합니다.
문제를 설명하는 예제 데이터를 게시하십시오. 또한 입력 데이터를 덮어 쓰고 있기 때문에 SUM 및 SUM_FLAG이 입력 데이터의 변수가 아닌지 확인하십시오. 그렇다면 SET 문이 실행될 때 값을 덮어 쓰게되므로 RETAIN은 쓸모가 없습니다. – Tom
누락으로 설정되는 이유는 알 수 없습니다. 일부 더미 데이터에 대한 코드를 테스트 한 결과 괜찮 았습니다. – user2877959