2017-04-06 5 views
0

이것은 정말로 이상하지만 도움을 받기를 바랍니다. SAS 9.3의 DATA 단계에서 FILE 문을 사용하여 다른 사람의 SPSS 파일을 가져 와서 일부 변수를 다시 코딩하고 생성 한 다음 파일을 출력 할 수 있습니다. INFILE은 운이 좋지 않았기 때문에 PROC IMPORT를 사용하여 데이터를 txt 형식으로 변환했습니다.왜 출력 파일에 내 데이터 집합의 변수로 채워진 이상한 추가 열이 포함되어 있습니까?

proc import datafile = 'C:\file.sav' 
    out = work.master_A 
    dbms = sav 
    replace; 
run; 

data work.master_B; 
    file 'C:\file.txt' 
     delimiter = '09'x 
     dsd 
     dropover 
     lrecl = 32767; 

    put 
     'animal' '09'x 
     'vegetable' '09'x 
     'mineral' '09'x 

    set work.master_A; 

     format animal $11.; 
     format vegetable $10.; 
     format mineral $8.; 

     put animal @; 
     put vegetable $ @; 
     put mineral @; 

run; 

정말 간단한 작업이어야합니다. 그러나 지정하는 출력 파일 유형 (.txt, .csv)에 관계없이 출력 파일에는 추가 열이 포함됩니다. 이 열은 변수 이름/헤더가 없습니다. 그러나 열 셀에는 데이터 열의 이름이 채워집니다.

예를 들어, 내 원래의 데이터 인 경우 : 동물 식물 광물 고양이 브로콜리 석영 개 아스파라거스 다이아몬드 조류 선인장 셰일

출력 데이터는 다음과 같습니다 동물 식물 광물 고양이 브로콜리 석영 동물 식물 광물 동물 식물의 광물 개 아스파 라 거스 다이아몬드 동물의 식물 미네랄 동물의 식물의 미네랄 조류 ficus 혈암 동물의 식물 미네랄 동물의 식물 광물

어떤 아이디어?

감사합니다.

+0

첫 번째 PUT 문에 세미콜론이 누락 되었습니까? 여기에 오타가 있었습니까? 아니면 실제 프로그램에 PUT 문이 끝나지 않았습니까? – Tom

+0

PROC IMPORT가이 질문과 관련이 있습니까? 데이터 세트를 CSV 파일로 출력하는 방법을 알고 싶다는 것 같습니다. – Tom

답변

1

가져 오기 단계가 정상적으로 처리되었습니다. 변수를 변형하려고 시도한 적이 없으므로 제대로 수행했다고 가정 해 봅시다.

설명하는 문제는 입력 데이터 세트를 관찰 할 때마다 헤더를 다시 작성하는 것과 같은 결과입니다. 데이터 단계의 첫 x 째 반복에서 헤더 만 쓰도록 제한해야합니다.

data _null_; 
    file 'C:\file.txt' dsd dlm='09'x; 
    if _n_=1 then put 
    'animal' '09'x 
    'vegetable' '09'x 
    'mineral' 
    ; 
    set master_A; 
    put animal vegetable mineral; 
run; 

구분 된 파일을 작성하는 데 PROC EXPORT를 사용할 수 있습니다.

proc export data=master_A outfile='c:\file.txt' dbms=dlm; 
    delimiter='09'x; 
run; 

세 개의 열로 만 제한하려면 KEEP = dataset 옵션을 사용하면됩니다.

proc export data=master_A(keep=animal vegetable mineral) outfile='c:\file.txt' dbms=dlm; 
    delimiter='09'x; 
run; 
+0

고마워요, 톰! 네, 고맙게도 누락 된 세미콜론은 단지 오타였습니다. 잘 잡으세요! 그리고 예! 그게 정확히 뭐하는거야! 왜 그런가? 나는 전에 이것에 빠져 본 적이 없었습니다. 그리고 그것은 나에게 무슨 일이 일어나고 있는지 이해할 수없는 절대적인 견과를 몰고 왔습니다. PROC EXPORT는 각 변수의 형식을 지정해야한다는 것을 제외하고는 훌륭한 아이디어입니다. 따라서 위의 세 가지 옵션 중 첫 번째 옵션을 사용하여 형식을 지정하는 구문을 추가 할 수 있다고 생각합니다. 도움과 추가 통찰력에 감사드립니다 !!! 너 멋지다! – doctorjay

+0

'IF _N_ = 1' 테스트는 데이터 단계의 첫 번째 패스에 대해서만 헤더 행을 출력하도록합니다. 형식 지정에 대한 의미가 확실하지 않습니다. CSV 파일에 서식이 없습니다. 아마도 구분 된 파일을 원하지 않을까요? 일반적으로 문자 변수에 첨부 된 모든 형식을 제거합니다. 형식을 DATE 변수에 첨부 할 수 있습니다. 'format _character_;'를 사용하여 문자에서 제거하거나'_all_'을 사용하여 모두 제거 할 수 있습니다. 그런 다음 날짜 및 필요한 형식에 대한 형식을 다시 추가 할 수 있습니다. YYMMDD10을 사용하고 있습니다. 날짜가 있으면 훨씬 더 이식성이 좋습니다. – Tom

+0

오 세상에! 고마워, 탐!왜 내가 두뇌가 멈추고 형식이 지정되지 않은 파일 형식에 형식을 할당하려고하는지 알지 못합니다! 난 그냥 내 보낸 xlsx 파일에 형식을 적용해야합니다. 이런! 입력 데이터 세트를 관찰 할 때마다 헤더를 다시 쓰는 이유는 무엇입니까? 나는 전에 그것에 빠져 본 적이 없다. 대단히 감사합니다! – doctorjay