SAS学习系列11 对数据做简单的描述统计Word文档格式.docx
- 文档编号:21374427
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:14
- 大小:236.58KB
SAS学习系列11 对数据做简单的描述统计Word文档格式.docx
《SAS学习系列11 对数据做简单的描述统计Word文档格式.docx》由会员分享,可在线阅读,更多相关《SAS学习系列11 对数据做简单的描述统计Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
(4)默认输出非缺省值个数、均值、标准差、最大值、最小值;
也可以自己指定需要输出的描述统计量:
MAX——最大值;
MIN——最小值;
MEAN——均值;
MEDIAN——中位数;
MODE——众数;
N——非缺省值个数;
NMISS——缺省值个数;
RANGE——极差;
STDDEV——标准差;
SUM——累和;
例1鲜花销售的数据(C:
\MyRawData\Flowers.dat),变量包括顾客ID,销售日期,petunias,snapdragons,marigolds三种花的销量:
读取数据,计算新变量销售月份month,并使用procsort按照月份排序,并使用procmeans的by语句来按照月份描述数据。
代码:
datasales;
infile'
c:
\MyRawData\Flowers.dat'
inputCustID$@9SaleDateMMDDYY10.PetuniaSnapDragonMarigold;
Month=MONTH(SaleDate);
procsortdata=sales;
byMonth;
/*CalculatemeansbyMonthforflowersales;
*/
procmeansdata=salesMAXDEC=0;
varPetuniaSnapDragonMarigold;
title'
SummaryofFlowerSalesbyMonth'
run;
运行结果:
(二)使用统计量
有时候需要将统计量存入新数据集,以便进一步做数据分析,或者与原数据集合并。
一、将统计量存入新数据集
可以用ODS(OutputDeliverySystem)系统或者OUTPUT语句,下面介绍用OUTPUT语句。
语法:
OUTPUTOUT=数据集名统计量名(变量列表)=新列名;
示例:
PROCMEANSDATA=zooNOPRINT;
VARLionsTigersBears;
OUTPUTOUT=zoosumMEAN(LionsBears)=LionWeightBearWeight;
RUN;
例2仍然是例1的鲜花数据,读取数据,按照CustomerID排序,使用procmeans过程,将mean和sum值存入新数据集totals中。
byCustID;
/*CalculatemeansbyCustomerID,outputsumandmeantonewdataset;
procmeansNOPRINTdata=sales;
outputout=totals
mean(PetuniaSnapDragonMarigold)=MeanPMeanSDMeanM
sum(PetuniaSnapDragonMarigold)=PetuniaSnapDragonMarigold;
procprintdata=totals;
SumofFlowerDataoverCustomerID'
formatMeanPMeanSDMeanM3.;
程序说明:
(1)“NOPRINT”告诉SAS不产生任何输出结果,因为已经存入新数据集zoosum;
(2)保存统计量的新数据集,包括想要的统计量、BY/CLASS语句的变量、_TYPE_、_FREQ_;
(3)BY语句变量有3个水平:
756-01、834-01、901-02,结果是3个观测,CLASS类似。
二、合并统计量到原数据集
1.前面讲到将按“BY变量”分组统计量保存为统计量数据集,进一步可以用MERGE语句,将统计量数据集按照公共的“BY变量”,通过一对多匹配合并到原数据集。
例3运动鞋经销商的销售数据(C:
\MyRawData\Shoesales.dat),变量包括风格名称、运动类型、第四季度销量:
市场经理想要一个报表,每种风格运动鞋占该运动类型销量中的百分比。
datashoes;
\MyRawData\Shoesales.dat'
inputStyle$1-15ExerciseType$Sales;
procsortdata=shoes;
byExerciseType;
/*SummarizesalesbyExerciseTypeandprint;
procmeansNOPRINTdata=shoes;
varSales;
outputout=summarydatasum(Sales)=Total;
procprintdata=summarydata;
SummaryDataSet'
/*Mergetotalswiththeoriginaldataset;
datashoesummary;
mergeshoessummarydata;
Percent=Sales/Total*100;
procprintdata=shoesummary;
idExerciseType;
varStyleSalesTotalPercent;
SalesSharebyTypeofExercise'
2.若统计量是全体观测的汇总统计量(无BY变量做分组统计),此时,就不能直接采用一对多匹配(没有共同“BY变量”)合并。
但可以用SET语句实现。
DATA新数据集;
IF_N_=1THENSET汇总统计量数据集;
SET原数据集;
注:
“汇总统计量数据集”只有一条观测值。
创建新数据集时,第一次迭代循环(_N_=1)就读入该观测值,并一直为后续读入“原数据集”保留它(相当于RETAIN语句)。
该语法机制也可用于:
没有匹配变量情况下,将一条观测与多条观测合并。
例4仍是例3的数据,市场经理想要一个报表,每种风格运动鞋占总销量的百分比。
*Outputgrandtotalofsalestoadatasetandprint;
outputout=summarydatasum(Sales)=GrandTotal;
*Combinethegrandtotalwiththeoriginaldata;
if_N_=1thensetsummarydata;
setshoes;
Percent=Sales/GrandTotal;
varStyleExerciseTypeSalesGrandTotalPercent;
formatPercentPERCENT.2;
OverallSalesShare'
(三)使用procfreq为数据计数
用procfreq过程步可以对数据集的变量计算频数,再用tables命令以表格的形式输出:
只输出一个变量(单向表);
输出两个变量(双向表);
输出多个变量(交叉表)。
频数表也可以用来检查错误数据。
PROCFREQdata=数据集;
TABLES变量组合<
/可选项>
(1)关于变量组合:
一个变量的单向表,用“TABLES变量;
”;
两个变量的双向表,用“TABLES变量1*变量2;
(2)常用的可选项有:
LIST——用list形式打印交叉表(而不是网格);
MISSING——频数统计量中包含缺失值;
NOCOL——强制在交叉表中不打印列百分比;
NOROW——强制在交叉表中不打印行百分比;
OUT=data-set——输出数据集;
例5咖啡店的销售数据(C:
\MyRawData\Coffee.dat),记录了销售的咖啡种类(cappuccino,espresso,kona,icedcoffee),以及每次购买的顾客是打包还是原地就饮:
读入数据,计算两个变量的频数。
dataorders;
\MyRawData\Coffee.dat'
inputCoffee$Window$@@;
*PrinttablesforWindowandWindowbyCoffee;
procfreqdata=orders;
tablesWindowWindow*Coffee;
*输出两个表:
Window的单向表、Window和Coffee双向表;
(1)默认缺省值不计入频数,使用可选项MISSING可以包含缺省值;
(2)观察表2,可以发现Kon是错误数据,应该是kon.
(四)使用proctabulate生成表格报表
用proctabulate过程步可以生成表格报表,相当于给普通输出报表做个“礼盒包装”,让报表更美观好看。
该过程还可以计算、加入、输出统计量。
PROCTABULATE<
MISSING>
data=数据集<
指定格式>
VAR指定作统计分析的变量;
(按变量的值对数据做分组,分别处理)
TABLE分页变量,分行变量,分列变量<
(1)TABLE语句定义表格形式:
页维度、行维度、列维度;
指定一个变量默认是列形式,指定两个变量默认是行列形式;
(2)tabulate可以加上如下的关键词(用在TABLE变量中计算各统计量):
ALL——增加一行、一列或一页,显示总数目;
MAX——最大值;
MEAN——平均值;
P90——90%分位数;
PCTN——某类的观测值百分数;
PCTSUM——某类值总和的百分数;
SUM——求和;
(3)TABLE语句中,可以对变量做连接、交叉,或者它们的组合:
“连接”示例:
TABLELocomotionTypeALL;
“交叉”示例:
TABLEMEAN*Price;
“组合”示例:
TABLEPCTN*(LocomotionType);
(4)可以在proc步用可选项<
(全局),指定所有数据的输出格式,例如,
PROCTABULATEDATA=boatsFORMAT=COMMA10.0;
(5)TABLE语句的可选项:
/BOX=’str’,可以给表格报表的左上角方框输出“说明性短句”;
/MISSTEXT=’str’,可以给表格中的缺省数据指定一个“值”;
例如,
TABLERegion,MEAN*Sales/BOX='
MeanSalesbyRegion'
MISSTEXT='
NoSales'
例6关于船的数据(C:
\MyRawData\Boats.dat),变量包括名称、港口、动力方式、类型、价格、船长(英尺):
读入数据生成二维(列×
行)表格报表:
变量Locomotion和均值Mean分别作为报表的行和列,并增加一行、一列“计算总数目”(ALL关键词),并使用BOX和MISSTEXT选项增加表格的可读性。
databoats;
\MyRawData\Boats.dat'
inputName$1-12Port$14-20Locomotion$22-26Type$28-30Price32-37Length39-41;
*PROCTABULATEreportwithoptions;
proctabulatedata=boatsFORMAT=DOLLAR9.2;
classLocomotionType;
varPrice;
tableLocomotionALL,MEAN*Price*(TypeALL)/BOX='
FullDayExcursions'
none'
title;
(1)ALL关键词,英文版SAS软件中,显示是“All”而不是“全部”(可能是软件汉化的bug);
若要修改为过来,可以将代码中的table行,替换为:
tableLocomotionALL='
All'
MEAN*Price*(TypeALL='
)/BOX='
(2)若想去掉“Locomotion”、合并“Mean”“Price”“Type”单元格使得表格更紧凑,可以用“将Table变量赋值为空字符的形式”实现:
*Changingheaders;
procFORMAT;
value$typ'
cat'
='
catamaran'
'
sch'
schooner'
yac'
yacht'
proctabulatedata=boatsFORMAT=DOLLAR9.2;
formatType$typ.;
tableLocomotion='
ALL='
MEAN='
*Price='
MeanPricebyTypeofBoat'
*(Type='
table语句,是用赋值为空字符的形式去掉Locomotion、MEAN、Type单元格,并将Price单元格换成“MeanPricebyTypeofBoat”;
有时候当行顶部被赋为空字符时,会留下一个空白空格,可以用/ROW=FLOAT选项强制去除它,示例:
TABLEMEAN='
*Sales='
Region='
/ROW=FLOAT;
(3)也可以不在proc步中指定全局格式,而是为不同的数值变量指定不同的输出格式,示例:
TABLELocomotionALL,MEAN*(Price*FORMAT=DOLLAR7.2Length*FORMAT=2.0)*(TypeALL);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS学习系列11 对数据做简单的描述统计 SAS 学习 系列 11 数据 简单 描述 统计