2016-12-16 5 views
-1

SAS에서 새롭고 데이터 세트의 변수에있는 모든 항목이 조건 (즉, = 1)을 충족시키고 하나의 더미 변수 0을 반환하는지 확인하려고합니다 변수에있는 모든 항목이 1인지 아니면 적어도 하나는 1이 아닌지에 따라 1을 계산하십시오. 어떻게해야할까요?sas 열의 모든 항목을 검사하고 더미 변수 sas를 반환합니다.

IF colvar = 1 THEN dummy_variable = 1 

은 원래 변수와 동일한 크기의 다른 변수 dummy_variable을 만듭니다.

+0

이 더미 변수로 무엇을 할 계획입니까? 새로운 변수로 추가하고 모든 관측 값을 복제하고 싶습니까? 이 변수가 하나 뿐이고 관찰이 하나 뿐인 새로운 데이터 세트를 만들고 싶습니까? 또는 나중에 매크로 논리 또는 다른 데이터 단계로 나중에 테스트 할 수있는 매크로 변수를 생성하면됩니다. – Tom

답변

0
* Generate test data; 
data have; 
    colvar=0; 
    colvar2=0; 
    do i=1 to 20; 
     colvar=round(ranuni(0)); 
     output; 
    end; 
    drop i; 
run; 

* Read the input dataset twice, first counting the number 
* of observations and setting the dummy variables to 1 if 
* the corresponding variable has the value 1 in any obser- 
* vation, second outputting the result. The dummy variables 
* remain unchanged during the second loop.; 
data want; 
    _n_=0; 
    d_colvar=0; 
    d_colvar2=0; 
    do until (eof); 
     set have end=eof; 
     if colvar = 1 
     then d_colvar=1; 
     if colvar2 = 1 
     then d_colvar2=1; 
     * etc.... *; 
     _n_=_n_+1; 
    end; 
    do _n_=1 to _n_; 
     set have; 
     output; 
    end; 
run; 
0

PROC의 SQL 신속 임의로 정의 된 조건의 요약을 생성하기위한 좋은 도구입니다 감사합니다. 당신의 상태가 정확히 무엇인지는 분명하지 않습니다. 난 당신이 아래 코드에서 생성하는 테이블에 ALL_ONE 값을 원하는 것 같아요. 모든 관측치가 COLVAR = 1 일 때 1이됩니다. 하나가 아닌 값은 조건이 거짓 (0)이되게하므로 ALL_ONE은 1 대신 1의 값을가집니다.

결과를 작은 테이블에 저장할 수 있습니다.

proc sql ; 
    create table check_if_one as 
    select min(colvar=1) as all_one 
      , max(colvar=1) as any_one 
      , max(colvar ne 1) as any_not_one 
      , min(colvar ne 1) as all_not_one 
    from my_table 
    ; 
quit; 

하지만 매크로 변수에 값을 저장할 수도 있습니다.이 매크로 변수는 나중에 어떤 목적으로 쉽게 사용할 수 있습니다.

proc sql noprint ; 
    select min(colvar=1) into :all_one trimmed from my_table ; 
quit;