Можно ли превосходить ods со значениями в каждой ячейке в SAS?

Я пытаюсь сохранить отчет SAS в файл xlsx. Для этого я использовал функцию ods excel. Мои надежды были получены с помощью процедуры proc freq, в которой есть процент каждой строки и столбца. В этот момент вылезли проблемы. В результирующем файле xlsx значения подсчета и процентные значения каждой строки и столбца находятся в одних и тех же ячейках. Это затрудняет выполнение следующих шагов обработки данных. Есть ли вариант, который может справиться с этой проблемой??

*Теперь

year var1 var2
2010 3
3.0
15.0
97
97.0
85.0

хочу

year var1 var2
2010 3 15
3.0 97.0
15.0 85.0

person resol    schedule 25.05.2021    source источник
comment
Покажите свой код, включая оператор ODS EXCEL, который может иметь параметр STYLE=. Если вы работаете из пользовательского интерфейса, который записывает ваш код, добавьте журнал к вопросу.   -  person Richard    schedule 25.05.2021
comment
Попробуйте PROC TABULATE, который дает вам больше контроля.   -  person Reeza    schedule 25.05.2021


Ответы (2)


Вместо этого попробуйте создать выходную таблицу и экспортировать ее с помощью proc export. Например:

proc freq data=sashelp.cars noprint;
    tables make / out=freq_table;
run;

proc export 
    data = freq_table
    file = "/folder/myfile.xlsx"
    dbms = xlsx
    replace
    ;
run;

Если вы хотите, чтобы отчет выглядел индивидуально, вам нужно использовать proc report в выходной таблице вместо ods excel.

person Stu Sztukowski    schedule 25.05.2021

Похоже, вы создаете перекрестную таблицу в Proc FREQ.

Вы можете собирать данные ODS, которые используются для создания вывода, который вам не нравится, и манипулировать им таким образом, чтобы создавать вывод, который вам нравится.

ODS OUTPUT при транспонировании создает таблицу, которую можно просто распечатать и которая будет содержать нужные вам повторения.

Пример:

ods listing;
ods select none;
ods output CrossTabFreqs=ctf;
proc freq data=sashelp.baseball;
  table position * division;
  where position like '%B';
  title "FREQ";
run;
ods select all;

data have;
  set ctf;
  if substr(_type_,1,1) = '0' then position = 'Total';
  if substr(_type_,2,1) = '0' then division = 'Total';
run;

proc transpose data=have out=want;
  by position notsorted;
  var frequency percent rowpercent colpercent;
  id division;
run; 

ods excel file='ct.xlsx' style=plateau;

proc print data=want(where=(N(east,west,total)));
run;

ods _all_ close;

введите здесь описание изображения

Примечание:

Если вы зафиксируете вывод перекрестной таблицы (согласно Stu), вам, вероятно, придется создать сводную таблицу в Excel, и даже это приведет к созданию объединенных ячеек, которые вам не нравятся. Сводная таблица в Excel имеет встроенный фильтрующий пользовательский интерфейс.

person Richard    schedule 25.05.2021