2013-04-18 5 views
0

다른 변수에 포함 된 데이터를 기반으로 SAS 변수 이름을 만들려고합니다. 예를 들어, (나는다른 변수의 SAS 동적 변수 이름

Obs Var1 Var2 
    1 abc  X 
    2 def  X 
    3 ghi  Y 
    4 jkl  X 

시작할 수 있고 나는

Obs Var1 Var2 X Y 
    1 abc  X abc 
    2 def  X def 
    3 ghi  Y  ghi 
    4 jkl  X jkl 

내가이 일을하는 한 가지 방법이 있나요 끝낼 싶지만 먼저 필요한 변수를 만들 다소 추한 매크로를 필요 길이 명령문을 사용하여) 그리고 나서 데이터 스텝 루프 내에서 나중에 호출되는 일련의 번호 매겨진 매크로 변수 (관찰 당 1 개)를 생성합니다. 그것은 작동하지만 복잡하고 행당 생성을위한 여러 변수와 몇 천 개의 행을 포함하는 실제 데이터로 잘 확장 될 것이라고 생각하지 않습니다.

나는 배열을 사용하여 무언가를 시도했다. 매크로 var에 변수 이름을 저장하고, 배열 문을 생성하는 데 사용하며, 각 새 변수에 어떤 배열 색인이 필요한지 추적하려고 시도하지만 복잡하다. . 정말 vvaluex은 등호의 왼쪽에있을 수 없습니다 제외

vvaluex(var2)=var1 

에 유사한 것이 될 것입니다 도움이 될 무엇

. 어떤 생각이나 생각?

답변

0

PROC TRANSPOSE는 질문에서 예제를 수행하는 편리한 방법입니다.

data have; 
input Obs Var1 $ Var2 $; 
datalines; 
1 abc  X 
2 def  X 
3 ghi  Y 
4 jkl  X 
;;;; 
run; 

proc transpose data=have out=want; 
by obs; 
id var2; 
var var1; 
copy var1 var2; 
run; 

또 다른 옵션은 배열과 VNAME 사용하여, 당신이 전에 시도한 것과 아마도 유사합니다

proc sql; 
select var2 into :var2list separated by ' ' from have; 
quit; 

data want; 
set have; 
array newvars $ &var2list; 
do _t = 1 to dim(newvars); 
    if vname(newvars[_t]) = Var2 then do; 
    newvars[_t] = var1; 
    leave; 
    end; 
end; 
run; 

PROC의 TRANSPOSE는 더 빨리 그리고 아마도 더 유연해야한다,하지만이 더 나은 일부 작동 할 수 있습니다 목적.