2017-12-13 35 views
0

데이터 변수를 문자 변수에 넣으려고합니다. 그래서 나는 날짜가 (전에 전치 한 변수) var (이전 변수의 세 가지 다른 출력을 가짐)와 col1 (이전 변수의 값을 포함하는)이라는 세 가지 변수가있는 긴 변환 된 데이터 세트가 있습니다. 이제 출력이 세 가지 인 네 번째 변수를 만들고 싶습니다. 내 문제는 내가 항상 값을 잃어버린 만들 내 코드로 넣어 변수를 만들 수 있습니다.데이터를 문자 변수 sas에 넣기

data pair2; 
set data1; 
if var="BNNESR" or var="BNNESR_r" or var="BNNESR_t" then output; 
length all $ 20; 
all=" "; 
if var="BNNESR" then all="pdev"; 
if var="BNNESR_t" then all="trigger"; 
if var="BNNESR_r" then all="rdev"; 
drop var; 
run; 

이후에는 "all"변수로 다시 변경하고 싶습니다. 전 조약을 바꾸기 전에 오래된 병의 이름을 바꿀 수 있다는 것을 압니다. 그러나 완전한 계산이 진행될 것이고 실제로 그렇게하는 것이 쉬운 일이 아닌 매크로로 변환 될 것입니다.

+0

출력 데이터 세트에 이미 레코드를 작성한 후 일부 변수의 값을 변경하는 이유는 무엇입니까? – Tom

+0

그것 때문에 마르코 나는 다른 이름으로 총 20 번 BNNESR, BNNESR_t 및 BNNESR_r을 가지고 있기 때문에 나중에 사용하게 될 것이다. 내가 다시 tranpose 후, 나는 rdev pdev와 방아쇠로 계산할 것이다. 그리고 나는 그것을 매크로와 함께 항상 caclualte하려고 시도했다. var put은 항상 에러를 가지고있어서, 매크로 var를 항상 피하는 방법을 찾기로 결정했다. 총 내 코드는 어떻게 든 이렇게 보입니다 : –

+0

매크로는 코드를 생성합니다. 따라서 유효한 코드를 생성하십시오. – Tom

답변

1

귀하의 프로그램은 새로운 변수에 값을 할당하기 전에 데이터를 쓰고 있기 때문에 입력 데이터를 부분 집합으로 만들고 비어있는 새 변수를 추가합니다.

명시적인 OUTPUT 문을 사용하는 대신 하위 집합 IF (또는 WHERE) 문을 사용하십시오. 데이터 단계에 명시 적 OUTPUT 문이 있으면 SAS는 더 이상 데이터 단계 반복 끝에 관측치를 자동으로 쓰지 않습니다. IF 문의 목록 이후

data pair2; 
    set data1; 
    if var="BNNESR" or var="BNNESR_r" or var="BNNESR_t" ; 
    length all $20; 
    if var="BNNESR" then all="pdev"; 
    else if var="BNNESR_t" then all="trigger"; 
    else if var="BNNESR_r" then all="rdev"; 
    drop var; 
run; 

아마도 당신은 그냥 대신 DELETE 문을 사용하려면 다음 레코딩 단계의 값과 일치?

data pair2; 
    set data1; 
    length all $20; 
    if var="BNNESR" then all="pdev"; 
    else if var="BNNESR_t" then all="trigger"; 
    else if var="BNNESR_r" then all="rdev"; 
    else delete; 
    drop var; 
run;