2017-05-24 4 views
0

기본 데이터 단계에서 새 변수를 만들고이 새 변수를 기반으로 데이터 집합을 필터링해야합니다.새로 계산 된 변수에서 데이터 단계를 필터링 할 수 있습니까?

data want; 
    set have; 

    newVariable = 'aaa'; 
    *lots of computations that change newVariable ; 
    *if xxx then newVariable = 'bbb'; 
    *if yyy AND not zzz then newVariable = 'ccc'; 
    *etc.; 

    where newVariable ne 'aaa'; 
run; 

ERROR: Variable newVariable is not on file WORK.have.

나는 보통 2 단계에서이 작업을 수행하지만, 더 나은 방법이 있는지 궁금 하군요.

(물론 당신은 항상 WORK.have에 존재하는 변수에 따라 복잡한 where statement을 작성할 수 있습니다. 그러나이 경우 newVariable의 계산이 너무 복잡하고 제 2의 data step에 필터를 수행하는 것이 더 효율적이다)

이것에 대한 정보를 찾을 수 없었습니다. 대답이 문서에 있고 내가 찾지 못했다면 바보 같은 질문에 사과드립니다. 필요한 경우 질문을 제거하겠습니다.

감사합니다.

답변

1

사용하십시오 부분 집합 if 문 : 일반적으로

if newVariable ne 'aaa'; 

, if <condition>;if not(<condition>) then delete;에 해당합니다. delete 문은 SAS가 데이터 단계의이 반복을 포기하고 다음 반복을 위해 시작으로 돌아가도록 지시합니다. 서브 세트 if 문 앞에 명시적인 output 문을 사용하지 않으면 행이 출력되지 않습니다.

+0

간단하고 훌륭하게 작동합니다. 감사! –

+0

WHERE가 실패 할 때 이것이 작동하는 이유는 주목할 가치가 있습니다. 'WHERE' 절은 컴파일 타임에 나타나고 입력 레코드의 스트림에 적용됩니다. IF는 컴파일 된 문장이며 코드와 함께 인라인으로 적용됩니다. – DomPazz