《2022年常用抽样SAS程序 .pdf》由会员分享,可在线阅读,更多相关《2022年常用抽样SAS程序 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、常用抽样 SAS程序目前,各医学论坛上都有大量的执业医师考题等内容。对于选择题而言,最让人感兴趣的是那部分带答案的考题。显然,希望能做一下,后与答案对照验证和锻炼自己的实际水平。但是,带答案内容的弊病就是当读者阅读考题时便不由自主的先看了答案,使目的不能达到。 改变这种尴尬状态需要事先把考题和其对应的答案部分分离出来,进行自我测验完毕后再根据需要调配答案自动对照改分。由于该种抽样一个观测会包含很多的行,加之此后还有拆、合变化实际操作起来会有很大的困难,所以目前,不论是医学杂志亦或是相关网站,还是专业统计学论坛、书籍、杂志针对这样类型的抽样未见。基于此,本人根据实际使用经验,针对固定格式的txt
2、 文件写了 sas代码,运行效果满意。数据来源本次数据从 “爱爱医网 ”下载, 存入 e 盘目录下的文件夹名为各病种练习题 ,各样本尾缀为 .txt的文本文件,若为其他文件则首先要进行转换,使成sas可读文件。本次使用文件路径及格式如图:图一路径的基本情况(主意图中文件类型、格式)一习惯性抽题方法本次采用逐步前进法,即根据当时情况每次抽出前10 题、20 题等测试和学习,像读书一样,本次读完第一页,下次读第二页,依次类推。当然,加以修改,也可变成逐步后退法抽取,或由中间向两边名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精
3、心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 抽取等。1 考题和答案的分离处理编程将考题内容输出到output 窗口和桌面,而考题答案输出到桌面txt 文档供以后需要时调用、打开观。程序第一部分data a; infile各病种练习题肺炎练习题 .txt; length x $ 100. ; do i=1to7; input x & $;if _n_91thendelete;/*选第 11-20题*/ output; end ; data b(keep=x);set a; file 桌面试题集内容 .txt; where i7; put x
4、$; data c;set a; file 桌面试题集答案 .txt; where i=7 ; put x $; procprintdata=b noobs ; run ;2 答题环境的进一步发展通过以上几步处理,已经达到考题内容与答案分离的目的,可以打开桌面的考题内容进行自测然后与桌面的考题答案对照。此时可对Sas 进一步发挥,编程使sas自动批改作业结果。3 sas自动批改测试者将自己的答案填写在指定的sas程序步骤中,即“程序第二部分”提交后完成自动批改和评分。程序第二部分(示例)data d;input no y $ ;drop no ;cards;/*注意:答题所用字母的大小写应与答
5、案一致*/ 11 B 12 D 13 E 14 D 15 E 16 E 17 E 18 E 19 D 20 D 21 C 22 C 23 E 24 D 25 D 26 E 27 C 28 A 29 D 30 D ; data e(keep=x y g df);merge c d; if y=x then g = ; if y=x then g= ; if g= then d= 1; else d= 0;no+1; sumx+d;df=sumx/no*100 ; if _n_1; file 桌面试题集内容.txt; put x; data c;set a;where i=1; if _n_=1t
6、hendelete; file 桌面试题集答案 .txt; put x; procprintdata =b; run ; 自动批改系统用程序第二部分稍加修改程序第四部分data D; input no y $ ;drop no ;cards; 1 E 2 C 3 A 4 C 5 C 6 C 7 A 8 C 9 D 10 A 11 E 12 C 13 B 14 C 15 C 16 D 17 B 18 E 19 B 20 B 21 C 22 E 23 B 24 A 25 A 26 B 27 D 28 D ; data e(keep=x y g df);merge c d; if y=x then
7、g = ; if y=x then g= ; if g= then d= 1; else d= 0;no+1; sumx+d;df=sumx/no*100 ; if _n_ 28then df=. ; procprintdata =e label; label g= 答题正确和错误情况 df= 最终得分 ; run ; 输出结果截屏图二名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 二 完全随机抽样题法程序如下:程序第五部分d
8、ata a; do n1= 1 to 61 ; output ; end; /*总计 61题*/ procsql ; createview wxq1638 as select *,normal(0) as w from a /* view可改为 table*/ orderby calculated w; data b; set wxq1638(obs= 20);/*抽取 20题*/ drop w; data c; infile各病种练习题肺炎练习题 .txt; length x $ 100. ; do n= 1 to61; do i= 1 to7; input x & $;if _n_= 1
9、thendelete ; output ; end; end; procsql ; createtable wxq16888 asselect * from c ,b where n1=n; data d; set wxq16888; drop n n1; data e(keep=x);set d; where i= 7; file 桌面 试题集答案 .txt; put x; data f;set d; where i= 7; file 桌面 试题集内容 .txt; put x; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
10、名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - procprintdata =f; run ; 被抽中题目截频图三(可见答案已经被分离出去)事实上同样可以看见被选入的题目3、5、10、12, 等是随机数列,如果重新或重复提交程序第五部分,被选中的题目每一次都会有变化。由于数据集的增加,使得批改程序也需要稍加修改:程序第六部分data g; input no y $ ; drop no ;cards ; 1 D 2 B 3 E 4 D 5 E 6 A 7 C 8 E 9 D 10 D 11 E 12 D 13 B 14 B 15 D 16
11、C 17 D 18 C 19 D 20 A ; data h(keep=x y g df);merge e g; if y=x then g = ; if y=x then g= ; if g= then d=1; else d= 0;no+ 1; sumx+d;df=sumx/no*100; if _n_ 20 then df= . ; procprintdata =h label ; label g= 答题正确和错误情况 df= 最终得分 ; run ; 提交该程序后得到结果,此处略。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
12、- - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - Sas是目前功能最强大的统计学软件,不仅能够处理数据的各种统计,更重要的是其能独到的处理数据文件。通过相关编程,能有效达到读者的意愿(取决与编程者能力),从而给实际操作带来巨大的方便。三 系统抽样(又称等距,机械抽样)示例 程序第七部分data a; na=6; do n1= 1 to na; output ; end; procsql ; createview wxq1638 as select *,normal(0) as w from a orderby calculated
13、w; data b(keep=n1);set wxq1638(rename=(n1=nn) obs=1);/*obs可以大于 1变成伴行系统抽样*/ set a; do i= 1 to10;n1=nn+lag(na*i);if n1= .then n1=nn; output ; end; data c; infile各病种练习题肺炎练习题 .txt; length x $ 100. ; do n= 1 to61; do i= 1 to7; input x & $;if _n_= 1 thendelete ; output ; end; end; procsql ; createtable wx
14、q16888 asselect * from c ,b where n1=n; data d; set wxq16888; drop n n1; data e(keep=x);set d; where i= 7; file 桌面 试题集答案 .txt; put x; data f(keep=x);set d; where i= 7; file 桌面试题集内容 .txt; put x; procprintdata =f; run ; 试运行该程序后,sas窗口产生如下结果截屏图四:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名
15、师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 四 整群抽样法示例程序第八部分data a; na=10; do n1= 1 to na; output ; end; procsql ; createview wxq1638 as select *,normal(0) as w from a orderby calculated w; data b; set wxq1638 (obs=3);/*抽3群*/ data c(drop=k); infile各病种练习题肺炎练习题 .txt; length x $ 100. ; do k= 1 to
16、61; do i= 1 to7;if k = 7 & k = 13 & k = 19 & k = 25 & k = 31 & k = 37 & k = 43 & k = 49 & k = 55 then n= 10; input x & $;if _n_= 1 thendelete ; output ; end; end; procsql ; createtable wxq16888 asselect * from c ,b where n1=n; data d; set wxq16888; drop n n1; data e(keep=x);set d; where i= 7; file 桌
17、面 试题集答案 .txt; put x; data f(keep=x);set d; where i= 7; file 桌面试题集内容 .txt; put x; procprintdata =f; run ; 结果截屏图5:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 可见第一群观测从7-12 号,第二群从19 号开始延续到25 号。作业批改程序通用,可见程序6。五 分层抽样法示例:程序 9 data a1; do nn=
18、1 to 6; /* 每层安排 6个观测单位 */output ; end; procsql ; createview wxq1638 as select *,normal(0) as w from a1 orderby calculated w; data a2; set wxq1638 (obs=2);data a3; do n1= 1 to 61 ; if n1 = 7 & n1 = 13 & n1 = 19 & n1 = 25 & n1 = 31 & n1 = 37 & n1 = 43 & n1 = 49 & n1 = 55 then g= 10;/*10个层次 */ y=normal
19、( 0); output ; end; procrankdata =a3 out =a4; var y; by g; ranks y; procsql ; createtable wxq16888 asselect * from a2 ,a4 where nn=y; data b; set wxq16888; data c; infile各病种练习题肺炎练习题 .txt; length x $ 100. ; do n= 1 to61; do i= 1 to7; input x & $;if _n_= 1 thendelete ; output ; end; end; procsql ; cre
20、atetable wxq16888 asselect * from c ,b where n1=n; data d; set wxq16888; drop n n1; data e(keep=x);set d; where i= 7; file 桌面 试题集答案 .txt; put x; data f(keep=x);set d; where i= 7; file 桌面试题集内容 .txt; put x; procprintdata =f; run ; 结果截屏图6:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
21、- - - - - - - 第 9 页,共 16 页 - - - - - - - - - 可见,原样本经刻画后按g 分成 10 层,每层内含有6 个观察单位,本次编程从每层中各随机抽取了两单位进行观察。例如: 结果截屏图62、3 题位与 g=1 层内, 7、10 位与 g=2 的层内;余同理。作业批改程序通用,可见程序6。更为重要的是为将来要进行的各种复杂抽样提供了范例。附:几种简单抽样过程由于以上抽样比较复杂,需要在一定场合下使用,实际情况的科研设计抽样过程简单,因此需要将以上程序简化,以适应广泛的使用环境。一简单随机抽样(一种最容易实现的抽样)假如从容量为100 的总体中随机抽取10 个观
22、测组成一个样本,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 示例:程序 1 data a; na=100; do n= 1 to na; output ; end; procsql ; createview wxq1638 as select *,normal(0) as w from a orderby calculated w; data b(keep=n);set wxq1638(obs= 10); procpri
23、nt; run ; 结果截屏图1 二 简单机械抽样示例:程序 2 data a; na=3; /* 每个组段的间隔数,也就是每个组的单位数;编号供抽样用*/do n1= 1 to na; output ; end; procsql ; createview wxq1638 as select *,normal(0) as w from a orderby calculated w; data b(keep=n1);set wxq1638(rename=(n1=nn) obs=1); /* 随机抽取第一个观测号码(也可以是多个)*/set a; do i= 1 to20; /* 用第一个(或被抽
24、取的几个观测,样本容量将倍增)号码间隔na取20个为观察样本*/n1=nn+lag(na*i);if n1= .then n1=nn; output ; end; procprint; run ; 结果截屏图 2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 三 简单整群抽样示例:程序3 data a; nn=5; /* 假设 5个群 */do n1= 1 to nn; output ; end; procsql ; cr
25、eateview wxq1638 as select *,normal(0) as w from a orderby calculated w; data aa; set wxq1638(obs= 2); /* 决定随机抽取 2群(也可 0obs=5 )*/data aaa; do n= 1 to 100; if n= 20 & n = 40 & n = 60 & n = 80 then g= 5; /* 假设每个群里包含的观测号*/output ; end; procsql ; createtable wxq16888 asselect * from aa ,aaa where n1=g;
26、data d(keep=n g); set wxq16888; procprintdata =d; run ; 结果截屏图 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 四 简单分层抽样data a1; do nn= 1 to 6; /* 每层安排 6个观测单位 */output ; end; procsql ; createview wxq1638 as select *,normal(0) as w from a1
27、 orderby calculated w; data a2; set wxq1638 (obs=2); /* 每层随机抽取两个观测*/data a3; do n1= 1 to 61 ; if n1 = 7 & n1 = 13 & n1 = 19 & n1 = 25 & n1 = 31 & n1 = 37 & n1 = 43 & n1 = 49 & n1 = 55 then g= 10;y=normal(0); output ; end; procrankdata =a3 out =a4; var y; by g; ranks y; procsql ; createtable wxq16888
28、 as名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - select * from a2 ,a4 where nn=y; data b(keep=n1 g); set wxq16888; procprint; run ; 结果截屏图五 简单随机放回抽样data a; do n= 1 to10; output ; end; procsql ; createview wxq1638 as select *,normal(0) as
29、 x from a orderby calculated x; procsql ; createtable wxq668 as select *,ranuni(0) as w from a orderby calculated w; data b(keep=n);set wxq1638(obs= 4);/*抽了 4例*/ data c(keep=n);set wxq668(obs= 5);/*抽5例*/ data d; set b c; procprintdata =d; run ; 结果截屏图 5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
30、- - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 六如果怕程序三、四那样用if 定义层、组、群,也可以用以下形式实现data a; do n= 1 to8; output ; end; data b; do n= 9 to19; output ; end; data c; do n= 20 to 30 ; output ; end; data d; set a b c; procsql ; createtable wxq6638 as select *,ranuni(0) as w from d orderby cal
31、culated w; data b(keep=n);set wxq6638(obs= 10); procprintdata =b; run ; 结果七将程序六稍加修改data a; do n= 1 to8; output ; end; data b; set a; n1=n+10; output ; end; data d; set a b; procsql ; createtable wxq6638 as select *,ranuni(0) as w from d orderby calculated w; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
32、- - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - data b(keep=n);set wxq6638(obs= 10); if n10 then n=n- 10; else n=n; procprintdata =b; run ; 显然又见放回抽样的影子事实上简单随机抽样是最容易实现的一种抽样data cos; do q= 1 to10;x=normal(0); output ; end; procsortdata =cos; by x; procrankdata =cos out =a; var x; ranks x; data a1(keep=q);set a; if x= 4 thendelete ; procprintnoobs; run ; 截屏图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -