2014-05-20 2 views
3

.xls 파일의 열 이름 (가져 오기에 excelcs 엔진 사용)은 동적이며 매일 변경됩니다.동적 이름을 사용하여 열의 이름 바꾸기

참조를 수행하고 sas 내에서 동적 열 이름의 이름을 바꾸려면 이름이 무엇인지 직접 알지 못하도록해야합니다.

답변

3

이것은 동적으로 변경되는 방법에 따라 다릅니다. 완전히 예측할 수없는 경우 - 코드를 작성하여 다른 알려진 열을 제거하거나 코드를 작성할 수 없습니다. 가장 간단한 방법은 GETNAMES=NO을 사용하고 직접 이름을 설정하는 것입니다.

어떤 식 으로든 (예 : XXXX가 어떤 식 으로든 변경되는 "MYDYNAMIC_XXXX"와 같이) 예측할 수 있다면 dictionary.columns에서 알 수 있습니다. (수정 LIBNAME/memname/등 적절한;.. memname은 데이터 세트의 이름입니다) 당신이 알 필요가있는 경우

proc sql; 
select name into :dynname 
    from dictionary.columns 
    where libname='WORK' and memname='MYDATASET' 
    and name like 'MYDYNAMIC_%'; 
quit; 

또는, 당신은 알려진 열 이름을 제거하기 위해 NOT(IN(...)) 절을 사용할 수 있습니다.

마지막으로 일치하는 위치에있는 경우 GETNAMES=NO을 사용하는 것이 변수 번호 (예 :, 다섯 번째 변수 번호 인 경우)를 기반으로 dictionary.columns를 쿼리 할 수 ​​있습니다.

2

조의 마지막 코멘트를 펼치면 - 열이 같은 위치에 있는데, 그냥 다른 것을 부르는 것입니까?

그렇다면 dictionary.columns 테이블을 사용하여 특정 열 번호를 선택하고 해당 열 이름을 매크로 변수에 저장할 수 있습니다.

예, 당신의 열은 ... 엑셀/데이터 세트에서 5 열입니다

 
/* Pull column name */ 
proc sql ; 
    select name into :DYNVAR 
    from dictionary.columns 
    where libname = 'SASHELP' 
    and memname = 'CLASS' 
    and varnum = 5 ; 
quit ; 

/* Then to reference the column simply substitute it for &DYNVAR */ 
data want ; 
    set sashelp.class (keep=&DYNVAR) ; 
run ; 
필요한 경우 다음 여러 열이를 확장 할 수

...

 
/* Pull column name */ 
proc sql ; 
    select name into :DYNVARS separated by ' ' 
    from dictionary.columns 
    where libname = 'SASHELP' 
    and memname = 'CLASS' 
    and varnum in (1,4,5) ; 
quit ; 

/* Then to reference the columns simply substitute it for &DYNVARS */ 
data want ; 
    set sashelp.class (keep=&DYNVARS) ; 
run ; 
관련 문제