SAS может читать файлы с разделителями, у которых есть встроенные разрывы строк, если во встроенных разрывах строк используются символы, отличные от нормального конца строки.Поэтому, если ваши настоящие наблюдения заканчиваются CRLF (обычно для текстового файла Windows), а встроенные разрывы строк представляют собой просто один символ LF, тогда эти дополнительные разрывы будут рассматриваться как просто еще один символ в этом поле.
var1|var2|var3<CR><LF>
4657|366|text that<LF>
has some line<LF>
breaks [end text]<CR><LF>
45|264| more text that has<LF>
line breaks [end text]<CR><LF>
Например, вот шаг данных, который может преобразовать ваш исходный файл.
data _null_;
infile original lrecl=32767 ;
file copy lrecl=1000000 termstr=lf ;
input ;
_infile_ = tranwrd(_infile_,'[end text]','0d'x);
if _n_=1 then _infile_=trim(_infile_)||'0d'x;
len = length(_infile_);
put _infile_ $varying32767. len ;
run;
Но может быть лучше заменить встроенные разрывы строк на другие символы, например ^, вместо.
data _null_;
infile original truncover ;
file copy lrecl=1000000 ;
input line $char32767.;
len = length(line);
put line $varying32767. len @;
if _n_=1 or index(_infile_,'[end text]') then put ;
else put '^' @;
run;
Результат:
var1|var2|var3
4657|366|text that^has some line^breaks [end text]
45|264| more text that has^line breaks [end text]
Который легко читается.
Obs var1 var2 var3
1 4657 366 text that^has some line^breaks [end text]
2 45 264 more text that has^line breaks [end text]