.xls 파일의 열 이름 (가져 오기에 excelcs 엔진 사용)은 동적이며 매일 변경됩니다.동적 이름을 사용하여 열의 이름 바꾸기
참조를 수행하고 sas 내에서 동적 열 이름의 이름을 바꾸려면 이름이 무엇인지 직접 알지 못하도록해야합니다.
.xls 파일의 열 이름 (가져 오기에 excelcs 엔진 사용)은 동적이며 매일 변경됩니다.동적 이름을 사용하여 열의 이름 바꾸기
참조를 수행하고 sas 내에서 동적 열 이름의 이름을 바꾸려면 이름이 무엇인지 직접 알지 못하도록해야합니다.
이것은 동적으로 변경되는 방법에 따라 다릅니다. 완전히 예측할 수없는 경우 - 코드를 작성하여 다른 알려진 열을 제거하거나 코드를 작성할 수 없습니다. 가장 간단한 방법은 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를 쿼리 할 수 있습니다.
조의 마지막 코멘트를 펼치면 - 열이 같은 위치에 있는데, 그냥 다른 것을 부르는 것입니까?
그렇다면 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 ;