主线—SAS习得
2020-04-12 本文已影响0人
莫浪愁
游戏背景
主线任务-毕业论文
小浪运用office初级与PPT讲解,坎坎扛过了开题报告试炼,抵抗住了各大长老的夺命找茬,期间虽然遭到隐藏boss的英语提问,但小浪凭借近期闲暇时光修炼的半吊子英语,幸运残血通关。
按照以往玩家的经验来说,开题报告是最简单最轻松的一关,但没想到第一关就让小浪触发了隐藏boss,幸好通关,也算是因祸得福,解锁了【英语开题】隐藏成就。
休整完毕,小浪重新载入主线任务,而这一关是“数据分析”。
关卡目标:
将两万多条数据进行统计分析,进行基础统计描述、变量与结局的关联初步分析(t检验和卡方检验)、单因素与多因素回归模型分析。
技能要求:
数据分析技能
因为师父的要求,小浪选择了SAS9.4这款软件,下载完后,发现大小4.44G,看到这个数字,小浪不禁皱了皱眉,当然不是因为它是三个4,发音不吉利之类的原因,小浪可是个彻头彻尾的唯物主义者,整天把“世界是物质的”挂在嘴边,偶尔也会换换口味,说一说“子不语怪力乱神”。那为什么皱眉?当然是因为它太大了,听隔壁的小周说他用的R不到1个G,而且似乎R在之后的的科研任务当中适用的更多一些。
SAS习得
第一步
确定输出目标:
1.完成连续型变量的均数描述
2.绘制离散型变量的交叉表
3.进行两组数据变量与结局的差异性检验(连续变量t检验,离散变量卡方检验)
4.进行单因素多因素logistics回归
第二步
寻找输入资源:
秘籍两本:
1.《SAS and R data Management,Statistical Analysis,and Graphics》
2.《The Little SAS Book》(当然有中文版)
第三步
实践成果(更新中......):
*文件导入;
PROC IMPORT DATAFILE= "C:\Users\99225\Desktop\2020sasdata\SJbaseline.xlsx"
OUT= shfl DBMS=XLSX REPLACE;
getnames=yes ;
run;
*添加4个新变量;
data shfl_newvar;/*创建新数据集*/
set shfl;/*从旧数据集中提取(保留)变量*/
if index(var292,"脂肪肝") then diease=1 ;
else diease=0;/*筛选脂肪肝患者*/
testdate=input('01/01/2017',mmddyy10.);
testage=int(yrdif(var5,testdate,'age'));/*计算体检时年龄*/
BMI=var289/(var288/100)**2;/*计算BMI*/
run;
proc print data=shfl_newvar;
title "SHFL-NEWVAR";
run;
*统计描述均数;
data flmean;
set shfl_newvar(keep=diease testage var288 var289 BMI var290 var291 var293-var306);
if diease=1;
run;
proc means data=flmean;
var testage var288 var289 BMI var290 var291 var293-var306;
run;
data nflmean;
set shfl_newvar(keep=diease testage var288 var289 BMI var290 var291 var293-var306);
if diease=0;
run;
proc means data=nflmean;
var testage var288 var289 BMI var290 var291 var293-var306;
run;
*统计描述交叉表;
data freq;
set shfl_newvar(keep=diease var2 var3 var6 var7 var9 var10 var12-var22);
run;
proc freq data= freq ;
tables diease*(var2 var3 var6 var7 var9 var10 var12-var22 ) ;
run;
实践成果(20200427更新):
*20200427code更新文件导入;
PROC IMPORT DATAFILE= "C:\Users\99225\Desktop\2020sasdata\SJbaseline.xlsx"
OUT= shfl DBMS=XLSX REPLACE;
getnames=yes ;
run;
*添加11个新变量;
data shfl_newvar;/*创建新数据集*/
set shfl;/*从旧数据集中提取(保留)变量*/
if index(var307,"+") then BIL="+";
else BIL="-";/*1合并阴性(-)和-,添加BIL变量*/
if index(var292,"脂肪肝") then diease=1 ;
else diease=0;/*2筛选脂肪肝患者,添加患病变量*/
testdate=input('01/01/2017',mmddyy10.);/*3计算需要添加时期常量*/
testage=int(yrdif(var5,testdate,'age'));/*4计算体检时年龄*/
BMI=var289/(var288/100)**2;/*5计算BMI*/
if 30>testage>=20 then agegroup=1;
if 40>testage>=30 then agegroup=2;
if 50>testage>=40 then agegroup=3;
if 60>testage>=50 then agegroup=4;
if 70>testage>=60 then agegroup=5;
if testage>=70 then agegroup=6;/*6年龄分6段(此时需要看一下源数据testage的极值)*/
if var290>=140 or var291>=90 then testh=1;
else testh=0;/*7体检时是否高血压*/
if var23=2 then smokeg1=0;
if var23=1 and var26=2 then smokeg1=1;
if var23=1 and var26=1 then smokeg1=2;/*8吸烟组1从不、曾经、现在*/
if var23=2 then smokeg2=1;
if 20>var25>=1 then smokeg2=2;
if 40>var25>=20 then smokeg2=3;
if 60>var25>=40 then smokeg2=4;
if var25>=60 then smokeg2=5;/*9吸烟组2分5组(需要看一下源数据var25(每天吸烟几支)的极值)*/
if var27=2 then drinkgp1=1;/*10饮酒组1从不喝酒(var27=过去是否饮酒 var29=过去12个月是否饮酒)*/
if var27=1 and var29=2 then drinkgp1=2;/*饮酒组1曾经喝酒*/
if var27=1 and var29=1 then drinkgp1=3;/*饮酒组1现在喝酒*/
if drinkgp1=1 or drinkgp1=2 then drinkgp2=1;
if drinkgp1=3 and var30=0 then drinkgp2=1;
if drinkgp1=3 and 6>var30>=1 then drinkgp2=2;
if drinkgp1=3 and 11>var30>=6 then drinkgp2=3;
if drinkgp1=3 and 16>var30>=11 then drinkgp2=4;
if drinkgp1=3 and var30>=16 then drinkgp2=5;
/*11饮酒频次分5组(var30需查看源数据的极值)*/
run;
proc print data=shfl_newvar;
title "SHFL-NEWVAR";
run;
*表1-1人口学特征分布;
proc ttest data=shfl_newvar;/*年龄分布*/
class diease;
var testage;
run;
Proc freq data=shfl_newvar;
tables diease*(agegroup var2 var3 var6 var7 var9 var10 )/CHISQ ; /*年龄组 性别 民族 文化程度 是否退休 职业类型分布*/
run;
*表1-2相关合并症分布;
proc freq data= shfl_newvar ;
tables diease*(testh var12-var22 )/CHISQ ;/*体检时高血压 相关合并症分布*/
run;
*表1-3实验室指标和体检结果分布;
proc ttest data=shfl_newvar;
class diease;
var var288 var289 BMI var290 var291 var293-var306;/*身高 体重 BMI 收缩压 舒张压 实验室指标分布*/
run;
proc freq data= shfl_newvar ;
tables diease* BIL/CHISQ ;/*胆红素分布*/
run;
*表1-4行为学特征分布;
*吸烟;
proc freq data= shfl_newvar ;
tables diease*( var23 smokeg1 smokeg2)/chisq ;/*是否组,从不曾经现在组,每天吸烟量组*/
run;
*饮酒;
proc freq data= shfl_newvar ;
tables diease*( var27 drinkgp1 drinkgp2)/chisq ;/*是否,从不曾经现在组,每周饮酒频次组*/
run;
*体力活动;
proc freq data= shfl_newvar ;
tables diease*( var39 var44 var49)/chisq ;/*是否组*/
run;
*沐浴饮水;
proc freq data= shfl_newvar ;
tables diease*( var52-var66)/chisq ;
run;
proc means data= shfl_newvar ;
var var51 ;
run;
1.不同种酒精浓度标准确定,水与酒精密度确定。20200427遗留问题:
2.Excel中时间格式处理