我有一个包含4列的表,我想将它们分成一个表中的2个表2列和另一个表中的2列。但是这两个表应该在彼此下面。我想在proc报告format.code中应该在报告中。
id name age gender
1 abc 21 m
2 pqr 23 f
3 qwe 25 f
4 ert 54 m
我希望在一张桌子中使用id和名字,在其他表格中使用年龄和性别。但在ods中,一个在另一个下面。
答案 0 :(得分:0)
我使用数据setp将主表拆分为两个表,然后将它们相互附加,我添加了一个名为“source”的额外列,以便在表之间有所不同。如果您使用Proc报告,您可以按“来源”分组
代码:
*Create input data*/
data have;
input id name $ age gender $ ;
datalines;
1 abc 21 m
2 pqr 23 f
3 qwe 25 f
4 ert 54 m
;;;;
run;
/*Split / create first table*/
data table1;
set have;
source="table1: id & name";
keep source id name ;
run;
/*Split / create second table*/
data table2;
set have;
source="table2: age & gender";
keep source age gender;
run;
/*create Empty table*/
data want;
length Source $30. column1 8. column2 $10.;
run;
proc sql; delete * from want; quit;
/* Append both tables to each other*/
proc append base= want data=table1(rename=(id=column1 name=column2)) force ; run;
proc append base= want data=table2(rename=(age=column1 gender=column2)) force ; run;
/*Create Report*/
proc report data= want;
col source column1 column2 ;
define source / group;
run;
输出表:
报告:
答案 1 :(得分:0)
对于数据
data have;input
id name $ age gender $; datalines;
1 abc 21 m
2 pqr 23 f
3 qwe 25 f
4 ert 54 m
run;
作为Excel输出,可以通过两个Proc REPORT
步骤分成两部分;每个步骤负责一组列。 ODS EXCEL
中使用选项来控制表格处理的处理方式。
第一步通过DEFINE
管理公共标头,后续步骤为NOHEADER
,不需要DEFINE
语句。每个步骤都必须定义并计算新source
列的值。每个表之间会有一个Excel行间距。
ods _all_ close;
ods excel file='want.xlsx' options(sheet_interval='NONE');
proc report data=have;
column source id name;
define id / 'Column 1';
define name / 'Column 2';
define source / format=$20.;
compute source / character length=20; source='ID and NAME'; endcomp;
run;
proc report data=have noheader;
column source age gender;
define source / format=$20.;
compute source / character length=20; source='AGE and GENDER'; endcomp;
run;
ods excel close;
没有合理的单 Proc REPORT
步骤可以从数据集have
生成类似的输出。