sas试题课笔记三.doc
- 格式:doc
- 大小:87.51 KB
- 文档页数:8
Sas学习笔记人文社会科学学院高等教育学专业张宁S100081674整个SAS程序结构可以分为两个部分,数据data步与过程proc步。
data步1:输入数据(包括手动输入数据、从文本文件中导入数据)a使用手动方法输入数据基本形式是:Data 数据集;Input 变量名(包括格式设置);/*在input语句中需要指定的格式必须和cards中数据的格式一致,需要考虑字符型与数值型数据的不同,以及是否是标准数据,根据实际情况调整数据格式设定*//* 同时在读入数据的时候,需要参考数据的形式,指定输入的起始位置与字符数,包括使用@指针控制、指定起始列终止列、指定字符数等*/其他语句;/*循环语句,选择语句等*//*sas表达式:sas运算符(包括算数、比较、逻辑)sas函数(包括算数函数、常用函数等)*/Cards ;数据;/*其中数据之间默认为空格作为分隔符,如果分隔符为其他符号,则要在input语句中指定delimiter=‘’*/Run;b使用文本文件导入法基本形式是:Data 数据集;变量属性设定;Infile‘文件地址’(firstobs=,obs= ,missover);Input;其他语句;/*循环语句,选择语句,sas表达式*/Run;当然输入数据的时候可以直接使用sas导入数据选项,根据情况设定形式,导入数据。
c总之在data步中常见的语句有:DA TA语句PUT语句——输出语句SET语句——读取观测语句ATTRIB语句——设定变量属性赋值语句——计算SAS表达式,给变量赋值DROP语句——删除变量语句KEEP语句——保留变量语句IF语句——条件语句DO-END语句——循环语句DELETE语句——删除语句OUTPUT语句——输出到数据集语句COMMENT语句——注释语句ARRAY语句——数组语句在实际操作中,可以灵活的使用这些语句实现数据处理。
2:同时在数据步中可以使用语句实现数据集的加工、合并和拼接a数据集排序/*事先对SAS数据集进行排序,是其它SAS程序通过使用BY语句直接调用该数据集及对数据集进行合并或串接的前提*/PROC SORT OPTIONS ;BY 〔DESCENDING〕变量名列表;END;b数据集串联/*在串联中必须要求同一个变量在不同数据集中数据形式一致,如果不一致,则需使用put函数将数据形式转换*/Concatenate方式Data 新数据集;Set 输入数据集1 输入数据集2 ……;/*可以使用(in=变量k)的形式检测来自哪个数据集*/Run;Interleave方式:Data 新数据集;Set 输入数据集1 输入数据集2 ……;By by-variables ;/*必须排序*/Run;c数据集并联/*用MERGE 语句并接SAS数据集*/MERGE (一对一合并)DATA 新数据集;MERGE 输入数据集1 输入数据集2 ……;RUN;MATCH MERGE(匹配合并)DATA 新数据集;MERGE 输入数据集1 输入数据集2 ……;BY by-variables ;RUN;d修改数据集modify/*modify语句修改数据集,并且此过程不能形成新的数据集,并且不需要排序*/data主数据集名称;modify 主数据集名称更新数据集名称;run;Update/*可以产生新的数据集,需要使用by排序*/data 数据集名称update 主数据集名称更新数据集名称;by变量名称;/*该语句必须出现,而且必须在该data步之前对update语句中的数据集进行排序*/run;Proc步该过程常用的sas语句有:V AR语句—指定分析变量MODEL语句—指定统计建模的模型/*一般采用‘因变量=自变量/选项’的形式*/BY语句—指定分组变量/*使用之前一般要使用proc sort语句进行排序*/CLASS语句—指定分类变量OUTPUT语句—指定输出结果存放的数据集FREQ语句—指定一个重复数变量WEIGHT语句—指定一个权重变量ID语句—指定用来标识观测的变量WHERE语句—选择输入数据集的一个行子集进行分析LABEL语句—为变量指定一个临时标签FORMAT语句—为变量输出规定一个输出格式/*过程步中规定的格式只是在本次运算中起作用,而数据步中规定的实行在整个数据集中永久存在*/1:使用proc print语句输出表格PROC FORMAT;V ALUE ;/*使用该语句定义用户格式*/PROC PRINT DATA 数据集SPLIT='*' ;/*使用该语句控制显示中的格式,使其按要求换行*/ID 变量名; /*把指定的变量在取消obs 的情况下排在表格最左列*/V AR 变量列表;/*需要输出的变量*/WHERE 条件表达式…;SUM 变量序列;/*变量需要处理的形式*/BY 变量名; /*在先前进行排序的情况下,对数据进行分组并要求每组进行小计*/PAGEBY 变量序列;/*是报告表格按组分页*/TITLEn'语句';/*使用该语句控制表头显示可以最多有十个标注*/FOOTNOTEn语句';LABEL 变量1= ‘label(标*签)’……;/*控制表头显示,可使用起始中split=定义的方式美化表格*/FORMA T ;/*用户自定格式的使用*/RUN;2:使用proc tabulate语句输出汇总表格PROC FORMAT;V ALUE ;/*使用该语句定义用户格式*/PROC TABULATE data 数据集options;CLASS /*分类变量,可以是数值型也可以是字符型*/;V AR ;/*分析变量,必须是数值型*/FORMAT ;/*用户自定格式的使用*/TABLE page-v,row-v,colum-v / options;/*table语句中使用的变量必须是class与var中定义过的变量*//*包括元素与操作符,根据操作符的不同控制表格格式,无=每个变量占一单独列;,=两个表达式产生一个二维列表分别代表行和列;两个,=三维列表分别是页行列;*隔开两个表示交叉列表*//*options选项控制表格其他形式,如使用rts控制第一列宽度*/KEYLABEL ;/*使用该语句为all类变量以及所有的统计量加标记*/TITLEn'语句';/*使用该语句控制表头显示可以最多有十个标注*/FOOTNOTEn语句';LABEL 变量1= ‘label(标*签)’……;/*控制表头显示,可使用起始中split=定义的方式美化表格*/RUN;3:使用proc gplot语句绘制散点及折线图PROC GPLOT DATA=数据集;PLOT 纵坐标变量*横坐标变量/选项;/*控制坐标轴:HAXIS=Values|Axisn定义水平轴的刻度;VAXIS=Values|Axisn定义垂直轴的刻度;NOAXIS取消坐标轴及相关的文字;CAXIS=Color定义坐标轴的颜色;CTEXT=Color定义坐标轴文本的颜色*//*加框:FRAME加框;CFRAME= Color给坐标轴包围的区域填色*/ SYMBOL V=I=W=C=;/*V=NONE;PLUS'+';STAR'*';SQUARE'方块';DIAMOND'菱形';TRIANGLG'三角形'*//*I= NONE ;JOIN'直线连接';SPLINE'光滑曲线连接';NEEDLE'从数据到横坐标画垂直线'*//*C=RED;GREEN;BLUE;ORANGE*/LABEL ; 变量1= ‘label(标*签)’……;/*控制表头显示,可使用起始中split=定义的方式美化表格*/TITLE C=颜色H=高度及单位F=字体;/*使用该语句控制表头显示可以最多有十个标注*/FOOTNOTE C=颜色H=高度及单位F=字体;RUN;4:使用proc gcharts语句绘制饼图及柱状图PATTERN c=颜色v=花纹;PROC GCHART DA TA=数据集;VBAR|HBAR|PIE|STAR|BLOCK/*垂直柱状图/水平柱状图/圆饼图/星形图/立体柱状图*/分类变量名列/选项;/*DISCRET/*指定分类方式*/MIDPOINT=列举值/*指定分组中点*/ SUMV AR=变量名/*指定分析变量*/TYPE=FREQ|SUM|MEAN|PCT /*指定统计量(无SUMVAR时缺省为FREQ,否则为SUM )*/GROUP=变量名/*指定分组作图*/SUBGROUP=变量名/*指定柱内分组*/FILL=S(SOLID)|X(CROSS)/*设定饼图的花纹*/*/LABEL ; 变量1= ‘label(标*签)’……;/*控制表头显示,可使用起始中split=定义的方式美化表格*/TITLE C=颜色H=高度及单位F=字体;/*使用该语句控制表头显示可以最多有十个标注*/FOOTNOTE C=颜色H=高度及单位F=字体;RUN;5:使用proc univariate、means、freq语句进行定量资料的统计描述PROC UNIV ARIATE DATA= 数据集名options;/*NOPRINT禁止统计报告在OUTPUT视窗中输出PLOT 绘出茎叶图、箱式图和正态概率图FREQ 给出频数表NORMAL 对变量进行正态性检验*/V AR 变量名列;BY 变量名列; /*排序*/FREQ 变量名;WEIGHT 变量名;ID 变量名;OUTPUT OUT= 数据集名关键字= 新变量名列.../*常用关键字有:基本统计量:N MEAN STD(标准差)CV(变异系数)SUM VAR(方差)RANG 百分位数描述:MIN P1 P5 P10 Q1 MEDIAN Q3 P90 P95 P99MAX与假设检验有关的统计量有:STDMEAN(标准误)T */pctlpts=百分位数, ...pctlpre=新变量名列;Run;PROC MEANS [ DATA= 数据集名选项统计量关键字列表;/*选项有:NOPRINT 禁止统计在OUTPUT视窗中输出MAXDEC=n 给出列表输出的最大小数位数,缺省值为2*/V AR 变量名列;BY 变量名列;CLASS 变量名列;FREQ 变量名;WEIGHT 变量名;ID 变量名列;OUTPUT OUT= 数据集名关键字= 新变量名列... ;/*关键字有:基本统计量有:N MEAN STD(标准差)CV(变异系数)SUM VAR(方差)RANG MIN MAX;与假设检验有关的统计量有:STDERR(标准误)T PRT(与t对应的p值) LCLM(可信区间下限) UCLM(可信区间上限)*/Run;PROC FREQ data+;TABLES 请求式/ 选项;/* 常用选项有ORDER=FREQ 按频数递减顺序排列ORDER=DATA 按数据集中出现的顺序排列ORDER=INTERNAL 按内部值排列(缺省) ORDER=FORMATTED 按外部格式值排列*/WEIGHT 变量名;BY 变量名列;Run;6:使用proc corr过程进行相关系数计算(相关关系散点图可以参照gplot语句)PROC CORR DATA=数据集OPTIONS;/*PEARSON 计算皮尔逊相关系数(缺省值);SPEARMAN 计算斯皮尔曼等级相关系数;NOSIMPLE 不打印输出各变量的描述性统计量;NOPROB 省略检验统计量p-值;COV(COVARIANCE) 打印协方差矩阵;NOCCORR 储存时省略相关系数;OUTP=指定皮尔逊相关系数存储的数据集;OUTS= 指定斯皮尔曼相关系数存储的数据集*/ V AR 变量名列;WITH 变量名列;/*计算with指定变量与var指定变量之间的相关系数*/PARTIAL 变量名列;RUN;7:使用proc reg过程进行回归分析PROC REG DATA= 数据集名OPTIONS;/*SIMPLE 计算并打印各变量的基本描述性统计量;SXORR 打印各变量的相关行列式;NOPRINT不打印输出;OUTEST=数据集名指定回归值输出的数据集;COVOUT=数据集名将所估计的协方差阵存入数据集;OUTSSCP=数据集名指定相关矩阵输出的数据集*/V AR 变量名列;BY 变量名列;FREQ 变量名列;MODEL 因变量=自变量/OPTIONS;/*model语句的作用可分为以下四个方面:1.关于报表打印的选项NOPRINT不打印MODEL语句所界定的分析结果;ALL 打印MODEL语句所有分析结果*//*2.界定参数估计值的选项STB 打印标准化回归系数;COVB 输出估计值的协方差阵;VIF 输出方差膨胀因子;COLLIN 进行多元共线性分析*//*3.关于预测值、预测误差的选项P计算每一个观测值y的期望值及其标准误;R 在P选项的基础上对预测误差做进一步分析;CLI 输出单个预测值95﹪的置信区间;CLM 输出预测值均值95﹪的置信区间;INFLUENCE 分析观测值对参数估计和模型预测值的影响*//*4.关于界定回归模型的选项SELECTION=none|forward|backward|stepwise|cp |rsquare|adjrsq 指定自动进行变量选择的方法;NOINT 规定回归模型中不包含截距项.*/OUTPUT OUT=数据集名关键字=新变量名列;RUN;PROC GPLOT DA TA=数据集;/*做回归图*/PLOT 纵轴变量名*横轴变量名;SYMBOL V=符号C=颜色I=none|rl|rq|rc /*不加线线性二次三次*/其他选项;RUN;。
一、数值变量1、单样本2、两独立样本3、两配对样本4、数据的Excel转sas5、多组样本方差分析6、两因素多水平的重复测量资料的分析7、随机区组设计资料的方差分析8、协方差9、完全随机设计资料的协方差分析10、直线相关分析11、多变量回归分析目录二、分类变量四格表基础公式连续校正公式配对四格表资料的x2检验RXC表三、样本含量的估计一、数值变量1、单样本:正态数据ttest课本p51data a; /*建立数据集*/ input X @@; datalines; 171 79 135 78 118 175 122 105 111 140 138 132 142 140 168 113 131 145 128 124 134 116 129 155 135 134 136 113 119 132 ;proc print data=a; /*打印数据集;每一次重新运行下面语句,必须有这一步为前提,目的为把数据存入内存*/ run;proc means n mean median std min max data=a; /*描述的统计量;描述数据集的特征*/ var X; run;proc univariate normal plot data=a; /*正态性分析;查看test for normality中Shapiro-Wilk 的W 值0.945184 对应的Pr < W 0.1255 正态性检验,发现p值大于0.05,则为正态分布的数据*/ var X; run;proc ttest h0=140; /*假设检验;语句的选择以正态性分析结果为准*/ var X; run;非参数统计方法:/*过去对2型糖尿病患者的研究得出其BMI=28.4。
*/data a; input patno wt_kg ht_cm; ht_m=ht_cm/100;BMI=wt_kg/(ht_m*ht_m);datalines;1 101.7 1782 107.1 1703 114.2 1914 111.9 1795 80.1 1826 118.1 1777 85.0 1848 89.1 1829 195.8 18410 97.8 18311 78.7 . /*缺省值用“.”表示*/12 117.5 17213 122.8 18314 91.1 16915 112.1 17716 122.1 18017 89.7 184 ;proc print data=a; run;proc means n mean median std min max data=a; var wt_kg ht_cm BMI; run;proc univariate normal plot data=a; /*查看test for normality中Shapiro-Wilk 的W 值0.849997 对应的 Pr < W 0.0136 正态性检验,发现p值小于0.05,则为非正态数据*/ var BMI; run;/*以下为另外两种检验正态性分布的方法*/proc rank out=rnk data=a; /*按照BMI运用rank的过程排序,产生新变量r_BMI,输出的数据集为rnk*/ var BMI; ranks r_BMI; run;proc sort data=a; /*对rnk数据集中的BMI,也是检验正态的直观办法*/by BMI; run;proc print data=rnk; /*检验BMI的原始值和其秩次r_BMI的对应关系是否正确*/ var BMI r_BMI; run;proc plot data=rnk; /*输出QQ-plot,检验BMI是否正态。
目录1、数据导入(对于导入数据参见little sas book第二章) (2)1.1创建新逻辑库创建新逻辑库有两种方法: (2)1.2 将你的数据放入SAS*/ (3)1.3用LIBNAME语句使用永久数据集 (3)2、开发数据(参见little sas book第三章) (3)2.1 格式、输入、读取 (3)2.2 用IF THEN DO END 和else if选择数据或选取部分数据 (5)2.3 求取最大值和总值 (6)2.4 累加和累乘 (7)2.5数组处理 (7)练习计算某只股票某段时间的累计收益率和年化收益率(提取数据和计算) (8)3、函数- COMPBL & COMPRESS、 (11)3.1 COMPBL & COMPRESS去掉空格 (11)3.2 INDEX;是找寻后一个变量在前一个变量中的位置 (12)3.3 SCAN提取字串、SUBSTR替换字串 (12)3.4 VERIFY;核实某字符的存在 (13)3.5 UPCASE vs. LOWCASE; (13)3.6 日期时间的显示和计算 (14)3.7 Truncation 用函数处理具体数值 (16)3.8 数据转置 (18)3.9 概率统计与随机抽样函数 (18)练习计算A股股票在2014年的双周收益率序列 (21)4、对表的处理 (22)4.1 表的连接 (22)4.2 表的合并 (24)5、数据查询实例 (27)6、利用宏 (30)6.1 利用宏程序导入股票日交易数据 (30)6.2用宏程序导入两个文本文件的数据并计算两只股票的总收益率和(几何平均)年收益率 (32)6.3 求winners50和losers50(答案) (33)6.4.1定义宏变量 (35)6.4.2引用宏变量 (36)6.4.3 多次引用宏变量 (36)6.4.4 改变宏变量的值 (37)6.4.5 如何隔开宏变量引用和文本 (38)6.4.6 显示宏变量值 (38)6.4.7 间接引用宏变量&& (38)6.4.8 定义宏和调用宏(什么是宏?) (39)6.4.9 宏参数(定义在宏%MACRO语句内的宏变量) (40)6.4.10 宏程序语句和宏函数 (41)1、对于在CSMAR下载的数据,用foxpro格式下载,然后用Stat/Transfer转换成SAS格式;对于在RESSET数据库下载的数据,建议使用下载数据时自动生成的数据导入程序(可能要稍作修改)导入SAS。
SAS数据分析完整笔记。
[收藏]2013-08-11ice数据分析数据分析1. SAS INSIGHT启动:方法1:Solution→Analysis→Interactive Date Analysis方法2:在命令栏内输入insight方法3:程序编辑窗口输入以下代码,然后单击 Submit按钮;Proc insight;Run;1.1 一维数据分析用 sas insight做直方图、盒形图、马赛克图。
直方图:Analysis→Histogram/Bar Chart盒形图:Analysis→Box plot马赛克图:Analysis→Box plot/Mosaic plot(Y)1.2 二维数据分析散点图:Analysis→Scattery plot(Y X)曲线图:Analysis→Line plot( Y X)1.3 三维数据分析旋转图:Analysis→Rotationg Plot曲面图:Analysis→Rotationg Plot设置 Fit Surface等高线图:Analysis→Countor plot1.4 分布分析包括:直方图、盒形图、各阶矩、分位数表,直方图拟合密度曲线,对特定分布进行检验。
1.4. 1 Analysis→Distribution(Y)第一部分为盒形图,第二部分为直方图,第三部分为各阶矩,第四部分为分位数表。
1.4.2 添加密度估计A:参数估计:给出各种已知分布(正态,指数等),只需要对其中参数进行估计;Curves→Parametric DensityB:核估计:对密度函数没有做假设,曲线性状完全依赖于数据;Curves→Kernel Density1.4.3 分布检验Curves→CDF confidence bandCurves→Test for Distribution1.5 曲线拟合Analysis→Fit(Y X):分析两个变量之间的关系1.6 多变量回归Analysis→Fit(Y X)1.7 方差分析Analysis→Fit(Y X)1.8 相关系数计算Analysis→Multivariate1.9 主成分分析Analysis→Multivariate2.SAS ANALYST启动:方法1:Solution→Analysis→Analyst方法2:在命令栏内输入analyst2.1 分类计算统计量:Data→Summarize by group2.2 随机抽样:Data→Random Sample2.3 生成报表:Report→Tables2.4 变量计算:Date→Transform2.5 绘制统计图2.5.1 条形图:Graph→Bar Chart→Horizontal2.5.2 饼图:Graph→Pie Chart2.5.3 直方图:Graph→Histogram2.5.4 概率图:Graph→Probality plot2.5.5 散点图:Graph→Scatter plot2.6 统计分析与计算2.6.1 计算描述性统计量Statistics →Descriptive→Summart Statistics只计算简单统计量Statistics →Descriptive→Distribution可计算一个变量的分布信息Statistics →Descriptive→Correlations可计算变量之间的相关关系Statistics →Descriptive→Frequency counts可计算频数2.6.2 列联表分析Statistics →Table Analysis2.7假设检验2.7.1单样本均值Z检验:检验单样本均值与某个给定的数值之间的关系Statistics →Hypothesis tests→One-Sample Z-test for a mean2.7.2单样本均值t检验:适用于不了解变量的方差情形推断该样本来自的总体均数μ与已知的某一总体均属μ0是否相等Statistics →Hypothesis tests→ One-Sample t-test for a mean2.7.3单样本比例检验:检验取离散值的变量取某个值的比例Statistics →Hypothesis tests→One-Sample test for a proportion2.7.4单样本方差检验:检验样本方差是否等于给定的值。
一、数据集的建立2.用INSIGHT创建数据集1)启动SAS INSIGHT模块,在“SAS INSIGHT:Open”对话框的”逻辑库“列表框中,选定库逻辑名2)单击“新建”按钮,在行列交汇处的数据区输入数据值(注意列名型变量和区间型变量,后面方差分析、相关性分析等都要注意!)3)数据集的保存:“文件” →“保存” →“数据” ;选择保存的逻辑库名,并输入数据集名;二、基本统计分析1.用INSIGHT计算统计量1)在INSIGHT中打开数据集在菜单中选择“Solution(解决方案)”→“Analysis(分析)”“Interactive Data Analysis(交互式数据分析)”,打开“SAS/INSIGHT Open”对话框,在对话框中选择数据集,单击“Open(打开)”按钮,即可在INSIGHT中打开数据窗口2)选择菜单“Analyze(分析)”→“Distribution (Y)(分布)”,打开“Distribution (Y)”对话框。
在数据集的变量列表中,选择分析变量X、分组变量Y。
(注意:分组变量就是那种可以区别不同种类的变量,例如地区编号、科目、组号等等,而分析变量一般是需要分析的数据,例如成绩,身高书目)3)单击“Output(输出)”按钮,在打开的对话框中包含描述性统计量选项。
4)选择选项矩统计量和分位数,取消默认的选项:“Box Plot/Mosaic Plot”和“Histogram/Bar Chart”,单击“OK”按钮,即可得到变量按分组的各种矩统计量(Moments)和分位数(Quantiles)2.]用“分析家”计算统计量1)启动“分析家”选择主菜单“Solutions(解决方案)”→“Analysis(分析)”→“Analyst(分析家)”,打开“分析家”窗口。
选择主菜单“File(文件)”→“按SAS名称打开”,打开“选择成员”对话框,选择数据集。
2)通过Summary Statistics菜单计算描述性统计量选择主菜单“Statistics(统计)”→“Descriptive(描述性统计)”→“Summary Statistics(汇总统计量)”,打开“Summary Statistics”对话框,选择变量列表中分析变量,单击“Analysis”按钮,选定分析变量单击“Statistics”按钮,打开“Summary Statistics:Statistics”对话框。
目录一、描述性分析的分类_______________________________________________ 2(一)数据分类_________________________________________________________ 2(二)定量数据的描述性分析_____________________________________________ 3(三)定性数据的描述性分析_____________________________________________ 4(四)例题的数据说明___________________________________________________ 4二、SAS实现-程序___________________________________________________ 5(一)means过程_______________________________________________________ 5(二)summary过程_____________________________________________________ 7(三)univariate过程 ____________________________________________________ 9(四)tabulat过程______________________________________________________ 13(五)四个过程的比较__________________________________________________ 14(六)freq过程________________________________________________________ 14(七)capability过程___________________________________________________ 16(八)gchart过程 ______________________________________________________ 18(九)gplot过程 _______________________________________________________ 20三、SAS实现-图形界面______________________________________________ 21(一)SAS/ASSIST _____________________________________________________ 21(二)SAS/ANALYST(分析家)_________________________________________ 22(三)SAS/INSIGHT(交互式数据分析)__________________________________ 23(四)三种方法比较____________________________________________________ 23第三部分数据的描述性分析描述性统计分析(Descriptive Statistics )是基础统计分析(Elementary Statistics),是综合统计分析(Summary Statistics)。
set data.hf000012;
where date>='01aug2006'd and tvolume>=100000 and tprice>0; run;
★日志的比较:
★练习3.2 使用if 语句完成例3.15〓
d d a a t t a a ex.block;
set data.hf000012;
if date>='01aug2006'd;
if tvolume>=100000;
if tprice>0;
run;
★原来用where语句的做法〓
d d a a t t a a ex.block;
set data.hf000012;
where date>='01aug2006'd and tvolume>=100000 and tprice>0; run;
★日志的比较:
NOTE: 从数据集 DATA.HF000012 读取了 65834 个观测。
NOTE: 数据集 EX.BLOCK 有 124 个观测和 31 个变量。
NOTE: "DATA 语句"所用时间(总处理时间):
实际时间 0.67 秒
CPU 时间 0.25 秒
NOTE: 从数据集 DATA.HF000012 读取了 124 个观测。
WHERE (date>='01AUG2006'D) and (tvolume>=100000) and (tprice>0);
NOTE: 数据集 EX.BLOCK 有 124 个观测和 31 个变量。
NOTE: "DATA 语句"所用时间(总处理时间):
实际时间 0.15 秒
CPU 时间 0.10 秒
可见 if语句是先读取数据然后再选择符合要求的观测而where语句则是直接读入满足条件的观测〓
num+1;
if last.date;
keep date num;
if num>5then delete;
run;
d d a a t t a a ex.blocktrade;
merge ex.num(in=id1) ex.blocktrade1(in=id2);
by date;
if id1=1 and id2=1;
run;
proc sort data=ex.blocktrade;★老师的做法接在第一步后〓by date;
run;
d d a a t t a a num;
set ex.blocktrade;
by date;
if first.date then num=0;
num+1;
if last.date;
keep date num;
run;
★作业3.5〓★第一题〓
keep s_20 C_T E_C_T average_C_T X;
C_T=max(s_20-18,0);
E_C_T+C_T;
average_C_T=E_C_T/_n_;
X= average_C_T*exp(-0.03*1);
run;
★第二题〓
d d a a t t a a ex.derivative;
array s(0:20) s_0-s_20;
do i=1to1000;
s_0=17.18;
do j=0to19;
s(j+1)=s(j)*exp((0.03-0.15**2/2)*0.05+0.15*sqrt(0.05)*ranno r(0));
end;
output;
end;
drop i j;
run;
d d a a t t a a ex.average_derivative;
set ex.derivative;
if min(of s_1-s_20)<15then value=(18- min(of
s_1-s_20))*exp(-0.03*1);★这里不确定value中所用的t值是否应为1〓if min(of s_1-s_20)>=15then value=0;
run;
★作业3.5〓★老师的答案〓
★a)〓
d d a a t t a a ex.ex3_5_1;
array S(0:20) S_0-S_20;
do i=1to1000;
S_0=17.18;
do j=0to19;
S(j+1)=S(j)*exp((0.03-0.15**2/2)*0.1+0.15*sqrt(0.05)*rannor (0));
end;
output;
end;
drop i j;
run;
c_end=max(aver_1-18,0);
sumc+c_end;
Ec=sumc/_n_;
value=Ec*exp(-0.03*1);
run;
★b)〓
d d a a t t a a ex3_5_3;
set ex3_5_1;
array S(0:20) S_0-S_20;
do j=0to20;
if S(j)<=15then leave;
end;
if j=21then value=0;
else do;
payoff=18-S(j);
value=payoff*exp(-0.03*j*0.05); end;
drop j payoff;
run;。