2016-08-02 1 views
0

다양한 국가에서 수집 된 데이터가 포함 된 대용량 SAS 데이터 세트 raw_data이 있습니다. 이 데이터 세트에는 관찰이 시작된 국가가 나열된 "국가"열이 있습니다. raw_data에 각 국가 별 .csv 파일을 내보내고 싶습니다.SAS 데이터를 사용하여 파일을 내보낼 때 열 이름이 누락되었습니다.

data _null_; 
    set raw_data; 
    length fv $ 200; 
    fv = "/directory/" || strip(put(country,$32.)) || ".csv"; 
    file write filevar=fv dsd dlm=','; 
    put (_all_) (:); 
run; 

그러나, 결과 .CSV 파일이 더 이상 raw_data에서 열 이름이 없다 : 나는 출력을 생성하기 위해 다음과 같은 데이터 단계를 사용합니다. 내 데이터 세트에 100 개 이상의 열이 있으므로 모든 열 이름을 나열하는 것이 금지됩니다. 누구든지 내보낼 .csv 파일에 열 이름을 첨부 할 수 있도록 위 코드를 수정하는 방법에 대한 지침을 제공 할 수 있습니까? 어떤 도움을 주셔서 감사합니다!

답변

1

변수 이름을 포함하는 매크로 변수를 만들어 CSV 파일에 넣을 수 있습니다.

proc sql noprint; 
select name into :var_list separated by ", " 
from sashelp.vcolumn 
where libname="WORK" and memname='RAW_DATA' 
order by varnum; 
quit; 

data _null_; 
set raw_data; 
length fv $ 200; 
by country; 
fv = "/directory/" || strip(put(country,$32.)) || ".csv"; 

if first.country then do; 
    put "&var_list"; 
end; 

file write filevar=fv dsd dlm=','; 
put (_all_) (:); 
run; 
+0

답장을 보내 주셔서 감사합니다. Reeza! 제공 한 proc SQL 문에서 select 절에 수동으로 이름을 나열해야합니까? 몇 백 열이 있으므로 가능한 한 많이 자동화하고 싶습니다. –

+0

No ... SQL 문이하는 일은 이름 목록을 생성합니다. – Reeza

+0

흠 ... 내가 이걸 실행할 때, 다음과 같은 오류가 발생합니다 : "오류 : 다음 열을 기여 테이블에서 찾을 수 없습니다 : 이름." –

1

이 데이터 단계는 프로그램과 매우 유사합니다. VNEXT를 사용하여 PDV를 조회하고 변수 이름을 각 파일의 첫 x 째 레코드로 기록합니다.

proc sort data=sashelp.class out=class; 
    by age; 
    run; 
data _null_; 
    set class; 
    by age; 
    filevar=catx('\','C:\Users\name\Documents',catx('.',age,'csv')); 
    file dummy filevar=filevar ls=256 dsd; 
    if first.age then link names; 
    put (_all_)(:); 
    return; 
names: 
    length _name_ $32; 
    call missing(_name_); 
    do while(1); 
     call vnext(_name_); 
    if _name_ eq: 'FIRST.' then leave; 
     put _name_ @; 
    end; 
    put; 
    run; 
+0

'FIRST.'테스트. (기간 포함). 또한 FILEVAR = 및 FILE 문을 NAMES 블록으로 이동하십시오. 그렇지 않으면 PUT _ALL_도 FILEVAR의 값을 씁니다. – Tom

+0

처음에 동의하십시오. 그러나 당신은 당신이 해답을 모른다는 코멘트를하기 전에 프로그램을 테스트해야합니다. –

+0

테스트가 문제가되었지만 테스트에서 FILE 문을 주석 처리하여 LOG의 값을 볼 수있었습니다. 이렇게하면 변수가 \ _ALL_ 목록에 나타납니다. – Tom

관련 문제