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

#excel #sas #proc #ods

Вопрос:

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

*теперь

год var1 var2
2010 3
3.0
15.0
97
97.0
85.0

хотеть

год var1 var2
2010 3 15
3.0 97.0
15.0 85.0

Комментарии:

1. Покажите свой код, включая ODS EXCEL инструкцию, которая может иметь STYLE= опцию. Если вы работаете с пользовательским интерфейсом, который пишет ваш код, добавьте журнал в вопрос.

2. Попробуйте таблицу PROC, которая позволит вам лучше контролировать ситуацию.

Ответ №1:

Вместо этого попробуйте создать выходную таблицу и экспортировать ее с 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 вместо

Ответ №2:

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

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

ВЫХОДНЫЕ ДАННЫЕ ODS при транспонировании создают таблицу, которую можно просто распечатать и которая будет содержать нужные вам повторы.

Пример:

 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 имеет встроенный пользовательский интерфейс фильтрации.