SAS Export набор данных как CSV или Excel, сохраняя разрыв строки - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь экспортировать свой набор данных из SAS в Excel или в формате CSV или XLS, однако, когда я делаю это, столбцы с разрывами строк портят мое превосходство. Есть ли способ экспортировать набор данных SAS, чтобы сохранить разрывы строк? Мне также нужно отображать метки вместо имен столбцов, и набор данных довольно большой ок. 150000 строк.

Вот что я сделал,

proc export data=Final_w_label
outfile='work/ExtractExcel.csv'
dbms=csv label replace;
run; quit;

Заранее спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

См. В нижней части поста для образцов данных.

Одним из эффективных способов создания экспорта, который Excel будет легко открывать и отображения встроенных строк новой строки, является использование XML.

libname xmlout xmlv2 'c:\temp\want.xml';
data xmlout.want;
  set have;
run;
libname xmlout;

В Excel (365) сделать Файл / Открыть, выберите файл want.xml, а затем выберите As an XML table в дополнительном диалоговом окне Open XML.

Другие способы

Существуют и другие способы перемещения данных SAS в форму, которую Excel может анализировать. Proc EXPORT создаст текстовый файл со встроенными символами возврата каретки в символьных переменных (для которых в Excel используются новые строки)

proc export dbms=csv data=have label replace file='c:\temp\want.csv';
run;

Проблема экспорта заключается в том, что Excel не сможет правильно импортировать данные с помощью своих мастеров. Может быть решение VBS для чтения экспорта, но это, вероятно, больше проблем, чем стоит.

Другой формой экспорта является dbms=excel, который создает .xlsx файлов:

proc export dbms=excel data=have label replace file='c:\temp\want.xlsx';
run;

Этот экспорт может быть открыт в Excel, и все столбцы будут правильными. Однако при первоначальном представлении значения данных в ячейках со встроенными символами возврата каретки символ новой строки не отображается. Дальнейшее изучение в режиме редактирования F2 покажет, что эти встроенные новые строки есть, а нажатие клавиши Enter (для принятия изменений) приведет к тому, что в представлении ячейки отобразятся встроенные новые строки. Вы не хотите, чтобы F2 отображал каждую ячейку, как ожидалось.

Пример данных

data have (label="Lines within stanza are separated by newline character");
  attrib 
    id length=8 label='Identity'
    name length=$50 label='Poem name'
    auth length=$50 label='Author'
    stanza1-stanza20 length=$250;
  ;

  array stz stanza:;

  id + 1;
  section = 1;

  infile cards eof=last;

  do while (1=1);
    linenum + 1;
    input;
    select;
      when (_infile_ = '--') leave;
      when (linenum = 1) name = _infile_;
      when (linenum = 2) auth = _infile_;
      when (_infile_ = '') section + 1;
      otherwise stz(section) = catx('0d'x, stz(section), _infile_);
    end;
  end;

last:

  output;

  datalines4;
Trees
Joyce Kilmer
I think that I shall never see
A poem lovely as a tree.

A tree whose hungry mouth is prest
Against the earth’s sweet flowing breast;

A tree that looks at God all day,
And lifts her leafy arms to pray;

A tree that may in Summer wear
A nest of robins in her hair;

Upon whose bosom snow has lain;
Who intimately lives with rain.

Poems are made by fools like me,
But only God can make a tree.
--
;;;;
run;
...