呼吸内科1分解SAS统计分析编程笔记
? DATA步:
进行数据管理和操作的基本步骤,主要功能包括:建立SAS数据集,导入外部程序数据文件,分割、合并、修改、更新现有的的SAS数据集,分析、呈现和管理数据,利用数据集中已有数据计算或生成新变量等。编程语言包括:
infile “D:\student.txt”; 获取外部数据;
input height weight; 指定读入数据的格式以及变量名
cards; 用于在SAS系统中直接输入数据,表明所列示数据的开始。
? PROC 步:
可引用现有的程序或过程进行相应的数据处理和分析活动。主...
SAS统计分析编程笔记
? DATA步:
进行数据管理和操作的基本步骤,主要功能包括:建立SAS数据集,导入外部程序数据文件,分割、合并、修改、更新现有的的SAS数据集,分析、呈现和管理数据,利用数据集中已有数据计算或生成新变量等。编程语言包括:
infile “D:\student.txt”; 获取外部数据;
input height weight; 指定读入数据的格式以及变量名
cards; 用于在SAS系统中直接输入数据,表明所列示数据的开始。
? PROC 步:
可引用现有的程序或过程进行相应的数据处理和分析活动。主要语法包括:
proc 过程名
<选项>;
< var < 变量名1 变量名2… 变量名n>>;
< where < 条件或表达式>>;
< by < 变量名1 变量名2… 变量名n>>;
run;
过程包括:
PRINT:显示数据集的变量名及变量值
SORT:升降序排列
MEANS:均值、差、极值等统计量
UNIVERIATE:常见统计量、t检验、分位数、极端值等
FREQ:频数、频率、累计频数、累计频率
CHART:饼图、横向/纵向直方图、星形图
? SAS编程语言表达式:
+(加)、-(减)、*(乘)、/(除)、**(乘方)、=(等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、><(不等于)、and(和)、or(或)、xor(异或)
? 条件语句:
if 条件或表达式 then
…; /*当条件或表达式满足时执行的程序*/
else
…; /*当条件或表达式不满足时执行的程序*/
例如:比较两个变量的大小,如果x>y,则输出“x>y”;如果xy then
put “x>y”; /*在“log”窗口中显示引号内的字符*/
else
if x100);
y=y+x; x=x+2;
end;
put “y=” y;
run; /*显示结果应也为“y=2500”*/
? 也可在不修改循环条件的前提下进行计算:
例如:
data;
x=1; y=0;
do until (x>100);
y=y+x; x=x+2;
if x>50 then leave;
end;
put “y=” y;
run; /*此为50以内的奇数自然数之和*/
? SAS 数据集的调用:
Sample.ABC Sample 指第一级库标记,“.”后的ABC指第二级数据集名。
? 利用SAS编程建立数据集:用DATA步指定数据集名称,INPUT函数指定变量及变量属性,并为对应的变量输入指定输入方式:
INPUT <变量1 变量2 …变量n> <@@>
例如:
data SASUSER.score;
input id name$ literature math @@;
label id=”学号” name=”姓名” literature=”语文” math=”数学”;
cards;
1 张三 89 87 2 李四 78 90 3 王五 79 89
4 赵二 90 76 5 孙玉 96 87 6 张一 87 89
7 李刚 89 69 8 黄源 69 88 9 陈强 75 78
10 钱刚 70 92
;
其中label 为变量名设置标签。cards 后紧跟数据列表,并以“;”结束。input 中“@@”表示按照input 定义的变量顺序依次连续读入数据,无论数据分为多少行,遇到“;”时则停止读入。此例中系统会按照idname$ literaturemath 的顺序读入cards的数据,首先1、张三、89、87, 其次2、李四、78、90,直到“;”。如果没有“@@”,则系统按照行读入数据,此例中先读入1、张三、89、87,然后跳到第二行的4、赵二、90、76
? SAS系统通常用“.”表示缺失值;“$”符号表示字符型变量。
data SASUSER.Car;
input ID Q1 B1 B2;
Cards;
1 7 3 3
2 8 2 3
3 10 3 5
4 9 4 4
5 10 4 3
6 6 3 3
7 . 2 4
8 7 4 4
9 5 3 4
10 11 2 4
run;
/*对变量排序*/
proc sort data=SASUSER.Car; /*使用sort 过程对SASUSER.Car数据集进行排序*/
by descending Q1; /*按照B1变量进行降序排列*/
proc print; /*在“output”窗口中显示SASUSER.Car数据集*/
run;
/*设定变量值的标签*/
proc format;
value B1_Fmt 1='3000元以下' /*指定一个变量值标签对应关系,并命名为“B1_Fmt”*/
2='3000~5000元' /*等号左边为变量值,等号右边为变量值的标签*/
3='5000~8000元'
4='8000元以上';
run;
data format_demo;
input B1@@;
cards;
1 2 3 4 4 4 3 2 3 1 1 3 4 2
;
run;
proc print data=format_demo;
run;
proc print data=format_demo;
format B1 B1_Fmt.; /*引用B1_Fmt变量值标签对应关系,注意变量值标签名称后要加上“.”*/
run;
/*增加或删除变量或观测值*/
Data Car; /*指定名为Car的临时数据集*/
set SASUSER.Car; /*从SASUSER.Car数据集中读入数据*/
drop ID; /*在Car临时数据集中删除ID变量*/
run;
Data Car;
set SASUSER.Car;
keep Q1 B1 B2; /*用KEEP语言也能达到只删除ID变量的目的*/
run;
/*数据的拆分与合并*/
data SASUSER.Car_Low SASUSER.Car_High;
set SASUSER.Car;
select;
when (B1<=2) output SASUSER.Car_Low; /*把低收入的观测值放在指定数据集中*/
otherwise output SASUSER.Car_High; /*把其他收入的观测值放在指定数据集中*/
end;
run;
data SASUSER.Car_Total;
set SASUSER.Car_Low SASUSER.Car_High; /*SET 语句后列示参加纵向合并的数据集*/
run;
proc sort=SASUSER.Student_Profile; /*按ID变量排序*/
by ID;
run;
proc sort=SASUSER.Student_Score; /*按ID变量排序*/
by ID;
run;
data SASUSER.Student_Total;
merge SASUSER.Student_Profile SASUSER.Student_Score;
by ID; /*把ID变量作为合并关键字*/
run;
proc print;
run;
/*数据清洗*/
proc sql; /*调用结构化查询语句SQL语言*/
select id, q1 /*从SASUSER.Car数据集中选中ID、Q1变量*/
from SASUSER.Car
where q1>10; /*指定查找条件*/
run; /*该输出结果表示ID为10的样本对应变量Q1的观测值为11,即找出的出错样本*/
proc sql;
select id, b2
from SASUSER.Car
where b2>4;
run; /*同理,该输出结果表示ID为3的样本对应变量B2的观测值为5,即找出的出错样本*/
proc sql;
select id, b1, b2
from SASUSER.Car
where b1>b2;
run;
/*该输出结果表示ID为5的样本对应变量B1和B2的观测值分别为4和3,即找出的逻辑关系出错样本*/
/*数据修正*/
data SASUSER.Car_Upd; /*建立存储更新信息的数据文件,无需更新的数据用缺失值表示*/
input id q1 b1 b2;
cards;
3 . . 2
5 . 2 .
10 1 . .
;
proc sort SASUSER.Car_Upd;
by id;
run;
proc sort SASUSER.Car;
by id;
run;
data SASUSER.Car_Renew; /*使更新后的数据存储在SASUSER.Car_Renew数据库中*/
update SASUSER.Car SASUSER.Car_Upd; /*使用SASUSER.Car_Update来更新SASUSER.Car*/
by id;
run;
proc print data=SASUSER.Car_Renew;
run;
/*数据尺度变换*/
data SASUSER.Car;
set SASUSER.Car;
Log_10Q1=log(Q1*10); /*将10倍Q1求对数得到的数值命名为Log_10Q1*/
Interval_Q1=100*(Q1-1)/9; /*将Q1区间转换为[0,100]并命名为Interval_Q1*/
Stnd_Q1=Q1; /*增加一个变量,用以存储Q1的标准化数值*/
run;
proc standard data=SASUSER.Car out=SASUSER.Car /*标准化变换的standard过程*/
mean=0 std=1; /*指定标准化过程中的均值为0、标准差为1*/
var Stnd_Q1; /*指定要进行标准化的变量*/
run;
proc print data=SASUSER.Car;
run;
? 统计图
1. 直方图
proc capability data=SASUSER.Gas; /*调用capability模块和Gas数据集*/
histogram CO2/ normal /*用CO2变量绘制直方图,并加入normal正态曲线*/
midpoint=150 450 750 1050 1350 /*指定直方图每个矩形的中点刻度*/
ctext=blue; /*指定直方图的颜色*/
run;
注意直方图适用于定量的连续数据,不太适用于定型数据或离散型的定量数据。
2. 条形图
proc gchart <选项>:
vbar/hbar/vbar3d/hbar3d 变量表选项 /*垂直、水平、立体条形图*/
? discrete: 把数值型变量处理为离散变量
? midpoint=:设定主轴(即垂直条形图的横轴或水平条形图的纵轴)上的组中值或分组标记
? sumvar=:设定被求和与求平均数的变量
? type=:设定条形长度或高度表示的统计量,在不使用sumvar选项时,为FREQ和PERCENT,即频数和频率;在使用sumvar时,为SUM和MEAN,即合计和均值
? ref=:根据指定数值绘制条形图中的参考线
? width=:设定条形图的宽度
? group=:根据指定的变量分组显示图形
? subgroup=:根据指定的变量绘制堆积条形图
例如:
proc gchart data=Sasuser.CCI; /*利用gchart绘制高分辨率图形*/
vbar CCI /*绘制变量CCI的垂直条形图。如要水平条形图,则用hbar参数*/
/description=”Vertical Bar Chart of CCI” /*命名图形*/
type=FREQ; /*表明此图是表示频数的条形图*/
run;
proc gchart data=Sasuser.CCI;
vbar3d CCI
/subgroup=gender /*每个条形都分为男性和女性,每个条形的高度之和等于男女性高度之和*/
;
run;
3. 线图
symbol i=join; /*设定两点之间是连续的,否则不能连成线*/
axis1 label=(‘年份’) order=(1978 to 2006 by 1);
axis2 label=(‘各产业GDP构成’);
axis3 label=(‘第一产业GDP构成’); /*分别设定三个坐标轴属性*/
proc gplot data=Sasuser.GDP123; /*使用gplot语句绘制线图*/
plot GDP_1* Year/haxis=asix1 vaxis=axis3; /*绘制一个只含第一产业在不同年份变动的线图,横轴的属性使用上面定义的axis1属性,纵轴使用axis3属性*/
run;
proc gplot data=Sasuser.GDP123;
plot GDP_1* Year GDP_2* Year GDP_2* Year GDP_3* Year/overlay haxis=vaxis=axis2;
run;
/*把三个产业在不同年份变动的线图进行叠加(使用overlay参数),并使用axis1 和axis2分别作为横纵轴属性*/
4. 散点图
symbol v=square; /*square 为矩形,dot为点,trangle为三角,缺省该语句系统默认为“+”号*/
proc gplot data=Sasuser.Survey;
plot survey_percapita* GDP_percapita;
run;
5. 饼图
title ‘平面2D饼图’; title ‘平面3D饼图’;
proc gchart data=Sasuser.CCI; proc gchart data=Sasuser.CCI;
pie cci; pie3d cci/percent=arrow; /*为3D饼图的扇形加上其表示的百分比*/
run; run;
title ‘圆环图’;
proc gchart data=Sasuser.CCI;
donut cci/ subgroup=gender; /*用性别变量将饼图分为两个圆环*/
run;
? 统计量
1. 均值
data;
x=mean(89,90,78,98,87,76,69,90,92,88); /*其中mean可替换为median中位数、range级差、var方差、std标准差、stderr标准误差、cv变异系数、skewness偏度、kurtosis峰度等参数*/
put ‘均值=’ x;
run;
? 其中,均值还可分为截尾均值(Trimmed Mean):去掉数据中最大N个和最小N个(或百分之N)值后的平均数。如N=1,则去掉98 和69,剩下8个样本。
? 缩尾均值(Winsorized Mean):把原始数据中的最小和最大的N个值用第N+1小的和大的那个数值替换,然后计算均值。如N=2,则把最小的2个数(69、76)用第三小的数(78)替换,且用90替换最大的两个数(98、92);然后计算均值。
data null;
input score@@;
cards;
89 90 78 98 87 76 69 90 92 88
;
proc univariate data=null trimmed=1 winsorized=2;
var score;
run;
2. 分位数
中位数把所有数据分成两部分,四分位数用三个点将数据分成4部分,其中处于25%位置对应的数值叫做下四分位数,记为“Q1”;处于75%位置对应的数值称为上四分位数,记作“Q3”data null;
input score@@;
cards;
89 90 78 98 87 76 69 90 92 88
;
proc means data=null q3 q1;
var score;
run;
3. 众数
数据中出现次数最多的数值,是重要的集中趋势测度指标。
命令将上面的q3 q1 替换成modes即可。
4. 四分位差
第三个四分位数减去第一个四分位数,反映了中间1/2数据的分散程度,其值越小中间的数据越集中。
命令将上表的q3 q1 替换成qrange即可。
? 详细的描述统计分析
1. FREQ过程:
proc freq <选项>;
by 变量; /*指定输出结果的分组变量,所有结果均按照指定变量的不同之分别进行计算*/
exact 统计选项<计算选项>; /*对特定统计量进行精确检验*/
output <输出数据集所包含的统计量> 选项; /*产生含有特定统计量的新数据集,即把输出结果存放至数据集中*/
tables 变量名列表选项>; /*生成多个变量的交叉分析表格,并对相关性进行测度和检验*/
test选项; /*对交叉表格一致性和相关性进行近似检验*/
weight 变量选项>; /*指定作为权数的变量*/
例如:
proc freq data=Sasuser.CCI;
table gender CCI; /*分别列出变量Gender和CCI的频数分布表*/
table gender * CCI; /*分别列出变量Gender和CCI的交叉频数分布表*/
run;
2. MEANS过程:
proc means <选项> <统计量>;
by 变量1 <…变量n> ; /*指定分组变量分别计算统计量*/
class变量选项>; /*定义观测组并计算其统计量*/
freq 变量; /*指定作为频数处理的变量*/
id 变量; /*在输出的数据集中增加标识变量*/
output <输出统计量> <数据集所包含的变量名列表> 选项>; /*指定输出结果存放至一个新的数据集中*/
types 组合形式需求; /*指定class变量的组合形式*/
var 变量 ; /*指定需要进行描述统计分析的变量*/
ways组合方式; /*指定单一class变量组合方式数*/
weight 变量; /*指定作为权数的变量*/
MEANS 过程的统计量关键词
clm
置信区间
nmiss
缺失样本量
var
方差
css
离差平方和
range
级差
median|p50
中位数
cv
变异系数
skewness|skew
偏度
p1|p5| p10
1%|5%|10%分位数
kurtosis|kurt
峰度
stddev|std
标准差
p90|p95|p99
90%95%99%分位数
lclm
置信区间下界
stderr
标准误差
q1|p25
下四分位数
max
最大值
sum
和
q3|q75
上四分位数
mean
均值
sumwgt
加权和
qrange
四分位差
min
最小值
uclm
置信区间上界
probt
T统计量的p值
n
样本量
uss
平方和
t
T统计量的值
例如:
proc means data=Sasuser.Gwy qrange sum mean n uss std range cv;
var score;
output out= Sasuser.Gwy_Output;
run;
3. UNIVARIATE 过程:
proc univerate <选项>;
by 变量; /*指定分组变量分别计算统计量*/
class变量选项> ; /*定义观测组并计算其统计量*/
freq 变量; /*指定作为频数处理的变量*/
histogram变量选项>; /*生成高精度直方图*/
id 变量; /*指定识别极端值的变量*/
inset 关键词列表选项>; /*在图形中插入统计表*/
output <关键字1=新变量名…关健字K=新变量名> <百分位数选项>; /*把结果存放至一个新的数据集中*/
probplot <变量>选项>; /*生成高精度概率图*/
qqplot <变量>选项>; /*生成高精度Q-Q图*/
var 变量 ; /*指定需要进行描述统计分析的变量*/
weight 变量; /*指定作为权数的变量*/
? 统计表
proc tabulate <选项>;
by 变量1 <…变量n> ; /*指定分组变量分别计算统计量*/
class变量选项>; /*指定分类变量*/
classlv 变量/style=<格式名称|parent> <[格式属性]>; /*指定分类变量标题的格式*/
freq 变量; /*指定作为频数的变量*/
keylabel 关键字1=‘关键字描述1’<…关键字n=‘关键字描述n’> /*指定关键词的标签*/
keyword 关键字/style=<格式名称|parent> <[格式属性]>; /*指定关键字的格式*/
table <<页维度,>行维度,> 列维度表格属性>; /*指定表格的布局及形式*/
var 变量选项>; /*指定表格中的分析变量*/
weight 变量; /*指定作为权数的变量*/
? 其中 TABLE选项最重要,表格的三个维度(页维、行维、列维)之间用“,”隔开,如果table之后只有一个变量表达式,则表示列维度:
例如:
table 地区,品牌,销售方式
表格以地区的形式分开,每个地区对应一张表格,每张表格的行表示品牌,列表示销售方式。
table 地区*品牌
该表格只有列维度,且列维度表示地区和品牌两个变量的交叉情况。变量间可以嵌套:table (A B)*C,该语句相当于A*C和B*C两种变量交叉情况。
? 其次,table语句中可设置表格中出现的统计量,统计量的关键字可在P12表格中找到。
例如,按照地区计算各品牌的销售均值:table 地区*MEAN*品牌
如果输入 “table 地区 all,品牌”,则表示指定表格按照行或列进行汇总
? 在使用table语句时,table语句中的变量必须通过class语句声明为分类变量,例如:
proc tabulate data=Sasuser.Laptop;
class district brand;
var price;
table district all, brand*(n price price*mean);
keylabel N=‘销售量’all=‘合计’sum=‘销售额’mean=‘平均价格’;
run;
本文档为【呼吸内科1分解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。