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