2012-10-10 10 views
1

나는 다른 테이블에서 내 자신의 구조로 빈 테이블을 생성 매크로 whitch를 구축하고 있습니다. 변수 유형을 변경하는 방법은 무엇입니까?SAS 매크로 변경 변수 유형

내 코드에서

예 :

`%let vname = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varName)))); 
%let vtype = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varType)))); 
%let vformat = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varFormat)))); 

%if &vtype = C %then %do; 
    &vname=putc(&vname,&vformat); 
%end;` 

을 그리고 그것은 작동하지 않습니다 ... VAR 유형을 변경하는 방법을 어떤 다른 아이디어?

답변

1

변경된 데이터 유형 (정의)에 일부 열이있는 빈 테이블이 필요한지 아니면 실제로 데이터 내용/값을 변환하고 싶은지 여부는 분명해야합니다. 첫 번째 사례는 훨씬 쉬워야합니다. 현재

&vname=putc(&vname,&vformat); 

당신이 데이터 값이 아닌 정의를 변환하기 위해 노력하고 있기 때문에. 변수 정의가 변경되지 않으며 데이터 단계에서 실제로 변경할 수 없습니다. 여전히 원래 변수가있는 경우 "new"변수를 만들 수 없습니다. 안에 같은 이름의 데이터 단계가 있습니다.

데이터 단계에서 데이터 단계 내에서 다른 이름으로 새 변수를 정의하고 출력 데이터 세트의 DROP (원래 이름) 옵션을 사용하여 결과에서 같은 이름으로 끝나야합니다. 데이터 세트 (필요한 경우 명확히 할 수 있음).

단지 빈 테이블을 정의하는 경우, PROC SQL이 쉽게 될 수있다, 당신은 같은 코드를 작성해야합니다 :

proc sql; 
create table lib.table (
orig_var1 type format informat label 
, orig_var2 NEWTYPE format informat label 
, ... 
); 
quit; 

dictionary.columns에서 구축 할 수있다. 또한 변수의 원래 순서를 유지하는 것이 더 쉽습니다 (데이터 단계에서 그리 쉽지 않음). 숫자 변수의 형식화 된 값을 새 문자 변수에 저장하려는 경우 사용되는 형식의 길이를 기반으로 문자 변수의 적절한 길이를 정의하는 데주의해야합니다.