2015-01-12 2 views
0

이중 파이프 분리 문자 "||"를 사용하려고합니다. 내가 SAS에서 txt로 파일을 내보낼 때. 불행히도 헤더 행을 올바르게 구분하는 것으로 보이고 데이터에 단일 버전을 사용합니다.이중 분리 문자로 SAS의 텍스트 파일로 내보내기

코드는 다음과 같습니다 결과

proc export data=notes3 outfile='/file_location/notes3.txt' 
dbms = dlm; 
delimiter = '||'; 
run; 

: 그것은 데이터 단계를 생성하기 때문에 수출을 할 수있는 이중 파이프는 사용하지 않습니다

ID||VAR1||VAR2 
1|0|STRING1 
2|1|STRING2 
3|1|STRING3 

답변

4

, 당신은 데이터 단계 파일 생성에 file 성명에서 dlmstr 대신 dlm을 사용해야합니다. 안타깝게도 proc exportdlmstr을 지원하지 않으므로 사용할 수 없습니다.

dictionary.columns 또는 sashelp.vcolumn을 사용하여 put 문을 작성하면 쉽게 proc export을 직접 만들 수 있습니다. 도움이 필요하면 해당 측면에 대해 더 궁금한 점을 질문 할 수 있지만 데이터 기반 결과물을 검색하면 필요할 때 찾을 수 있습니다.

1

이유 PROC 수출하는 file 문을 사용합니다. 이것은 알려진 제한 사항입니다 - 도움말 파일을 인용 :

제한을 : 문자열이나 문자 변수 허용 에도 불구하고, 첫 번째 문자열의 문자 나 변수가 출력 구분 기호로 을 사용한다. INFILE DELIMITER = 처리와 다릅니다.

헤더 행 ||은 파일 설명을 사용하는 대신 문자열 상수로 구성하기 때문에 작동합니다.

그래서 proc 내보내기 코드를 수정할 수 있다고 생각하지 않지만 데이터 세트에 누락 된 값이없고 아무 것도 포함하지 않은 경우 출력을 원하는 형식으로 변환하는 빠르고 데이터 단계가 있습니다. 파이프 문자 :

/*Export as before to temporary file, using non-printing TAB character as delimiter*/ 
proc export 
    data=sashelp.class 
    outfile="%sysfunc(pathname(work))\temp.txt" 
    dbms = dlm; 
    delimiter = '09'x; 
run; 

/*Replace TAB with double pipe for all rows beyond the 1st*/ 
data _null_; 
infile "%sysfunc(pathname(work))\temp.txt" lrecl = 32767; 
file "%sysfunc(pathname(work))\class.txt"; 
input; 
length text $32767; 
text = _infile_; 
if _n_ > 1 then text = tranwrd(text,'09'x,'||'); 
put text; 
run; 

/*View the resulting file in the log*/ 
data _null_; 
    infile "%sysfunc(pathname(work))\class.txt"; 
    input; 
    put _infile_; 
run; 

Joe가 제안했듯이 동적으로 생성 된 데이터 단계에 고유 한 구분 기호 논리를 작성할 수 있습니다. 당신이 두 개의 문자 구분 기호를 사용하려면

/*More efficient option - write your own delimiter logic in a data step*/ 
proc sql noprint; 
    select name into :VNAMES separated by ',' 
     from sashelp.vcolumn 
      where libname = "SASHELP" and memname = "CLASS"; 
quit; 

data _null_; 
    file "%sysfunc(pathname(work))\class.txt"; 
    set sashelp.class; 
    length text $32767; 
    text = catx('||',&VNAMES); 
    put text; 
run; 
+0

답변과 비슷하지만 파이프가 누락 된 불쾌한 데이터가 있습니다. 따라서 이중 파이프. – JJFord3

+1

Ok - 데이터에없는 문자를 찾는다. (나는 '09'x'를 아주 좋아한다.) proc export 호출에서 구분자로 설정하고,'||'로 바꾼다. – user667489

+0

'DSD '는 어떻게 사용합니까? – Joe

관련 문제