2017-11-16 14 views
1

H9999-999-999-999와 같은 여러 변수가있는 SAS 데이터 세트가 있습니다. 그러나, 나는 불필요한 열을 삭제해야하고 할 수있는 변수 목록 (ParamList)를 사용하고 그 내 변수가 포함되어 있기 때문에SAS : 변수 목록에 '-'기호가있는 이름이 들어있어 유지 = 문에서 오류가 발생합니다.

proc sql; 
select _NAME_ into :ParamList separated by ' ' 
from uniquePlanList; 
quit; 
%put ParamList = &ParamList.; 

proc sql; 
create table test as 
select * from out.seq_summ(keep=BPT_Cat &ParamList.); 
run; 

'-'나는 다음과 같은 오류가 나타납니다 심볼 :

오류를 214- 322 : 변수 이름 - 올바르지 않습니다.

ERROR 214-322 : 변수 이름 000이 유효하지 않습니다.

ERROR 80-322 : 변수 이름이 필요합니다.

오류 : KEEP 옵션의 값이 잘못되었습니다.

오류 : 잘못된 옵션 이름 -000.

오류 : 위의 오류 또는 경고로 인해 OUT.SEQ_SUMM 파일의 일부 옵션이 처리되지 않았습니다.

내가 알고있는이 같은 변수 밖으로 나열한다면 :

(계속 = BPT_Cat 'H9999-999-999-999'n'H9999-999-999-998'n를)

그러면 코드가 작동합니다. 하지만 수백 가지 변수가있는 데이터 세트가 있습니다. 변수 목록을 사용하는 것보다 불필요한 열을 삭제하는 더 좋은 방법이 있습니까? 아니면 변수 목록에서 문자열로 읽을 수있는 영리한 방법이 있습니까? 나는 이것을 사용해 보았습니다 :

(keep = BPT_Cat % str (& ParamList.)) 그러나 위와 같은 오류가있었습니다.

+0

'options validvarname = V7'을 설정하면 이름을 전혀 다룰 필요가 없습니다. 라벨에 유용하지만 코딩 할 때 전반적으로 명확하게 처리하는 번거 로움이 있습니다. – Reeza

답변

3

NLITERAL() 함수를 사용하면 코드에서 사용할 수있는 형식으로 이름을 생성 할 수 있습니다.

proc sql noprint; 
select nliteral(_NAME_) 
    into :ParamList separated by ' ' 
    from uniquePlanList 
; 
quit; 
0

방법에 대해 :

proc sql; 
select quote(_NAME_)||"n" into :ParamList separated by ' ' 
from uniquePlanList; 
quit; 
%put ParamList = &ParamList.; 

proc sql; 
create table test as 
select * from out.seq_summ(keep=BPT_Cat &ParamList.); 
run; 

이 정말로 그것을 테스트 할 수 없습니다 순간에 나와 함께 SAS가 없습니다.