이유 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;
답변과 비슷하지만 파이프가 누락 된 불쾌한 데이터가 있습니다. 따라서 이중 파이프. – JJFord3
Ok - 데이터에없는 문자를 찾는다. (나는 '09'x'를 아주 좋아한다.) proc export 호출에서 구분자로 설정하고,'||'로 바꾼다. – user667489
'DSD '는 어떻게 사용합니까? – Joe