加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

stata画函数和做多选统计

(2014-08-15 12:57:30)
标签:

股票

stata画函数和做多选统计

 stata画函数和做多选统计 (2014-07-25 17:47:23)
标签: 

调查问卷

    1、作函数图
    stata除了能够作8大图之外,作函数图也精准细腻。看看下面的图,其实很简单的一个命令就成了,即:
    twoway ( function y1=sin(x)+cos(x+5),range(1 25))  (function y2=sqrt(x),range(0 25))
    只要有想象力,实现什么二维图都不太困难,特别是对数学老师,在制作文档时不应该忽略了stata的这一作图功能。
可惜我不是数学老师,如果是我是中学数学老师,函数我都给学生直观出来。



      2、作多选统计
      stata在数值的统计功能方面的优势之强大是众数周知的,但是万一遇到问卷调查数据,单选不成问题,如果是多选,也许一般人认为stata无能为力了。比如,若问题有A、B、C、D、E、F6个选项,受访者填写问卷时可以选择一个以上的选项,那么最终汇集的数据中,对应于此问题的变量的值,就是多选型字符值。如何统计?怎样知道选择A的占比、选择B的占比。。。。
      此时,对应于每一个受访者,答案就是ABCDEF的组合,千万不要感到束手无策!一种办法是将字符型变量转化为数值型变量,然后再用命令tab XX,sum(XX)。这样得出的结果仍然是ABCDE各种组合类别的频数,不是期望得到的选A的占百分之几、选B的占百分之几等等。怎么办呢?此时要用excel表的替换、排序、求和功能。但是这有个小细节,输入原始数据的每一样本观测值时,必须按照ABCDEF选项的顺序排列,比如对选择A和E两个的受访者,就录入AE,不能有的录入AE,有的录入EA,如果不按顺序录入,excel就帮不了什么大忙了。如果选项按顺序录入(很容易做到的,但是事先不嘱咐好数据录入人员,也许未必统一按照升序或降序进行输入),那么统计A的频数时,就按照升序排序一下,凡是第一个是A的都在上面,让后对应的频数竖着用鼠标一选,合计数就出来了,直接记录下来就OK了。统计B的频数时,先用替换功能将A替换掉,再排序,依刚才的方法统计记录B。其他类推。这种方法还算是比较有效快捷。
       但是如果你发现,录入样本点的结果时,录入人员录入数据时没按照选项ABCDEF的顺序,既不是升序也不是降序,比如对于选择ADF选项的,有的录入成ADF,有的录入成DAF,有的录入成AFD,等等,随心所欲;这样搞选项不同的样本点,顺序就更乱了,如选ADF的就有那么多录入情形,选择ACDEF的呢!一看到这样录入数据,一般人都会气急败坏。但如果事先没交代如何录入多选的答案,又有多个录入人员对数据进行录入,你怎么办?此时,千万别说,一堆垃圾、没办法统计、白费功夫了等之类的话!千万别说没办法。办法是有的!
      此时,就要将录入的多选数据看成是字符数据(其实就是字符数据,如果选项是1、2、3、4、5之类的,录入的结果默认为数值型了,要转化为字符型)。整理字符型数据时,有一个比较好用的函数就是strpos(s1,s2),其中 s1对应的是被搜索的字符串, s2为要搜索的目标,函数返回结果为第一个被发现的s2在字符串s1中的位置(如果字符串s1里面确实有s2),例如strpos("this","is")返回值为3, strpos("IloveChina","Ch")返回值为6;如果在被搜的字符串里面找不到要搜索的目标,返回值为0,例如strpos("IloveChina","u")的返回值为0。千万别小看后一种返回值为0的情况,逻辑上讲,零即是一切!真可谓“空即是色”,还是佛陀智慧高哦。
      零的妙用是通过非零来实现的哦。假如刚才令你失望至极的变量是营销调研的顾客购买偏好(假定变量名为pref),选项A为花色、B为价格、C为样式、D为性能、E为渠道、F为关系,录入员录入的顺序乱七八糟。此时,假如您真想井井有条地统计出选择花色的共多少、占比多高,选择价格的共多少、占比多高,等等,那么,您可以生成prefa、prefb、prefc、prefd、prefe、preff五个虚拟变量来进行统计。选项被实际选择到时,对应的虚拟变量取值为1,没被选择到时则对应的取值为0。如果能够做到这个程度,那么统计频数、百分比就是小儿科了。但是如何得到各虚拟变量的准确值呢?告诉您:奥妙在于返回值0。
     此时,用gen prefa=strpos(pref,"A")!=0就可以得到虚拟变量prefa,命令运行的逻辑有两层嵌套:首先运行strpos(pref,"A"),如果pref变量中有A,那么潜在的返回值将是A在pref中的位置标志,如strpos("AB","A")=1,strpos("BA","A")=2,strpos("ABCD","A")=1,strpos("DBFEA","A")=5等等,反正不论在何位置,只要能够找到A,那么潜在返回值就不是0;其次运行判断潜在返回值是否为“非0”的逻辑判断,如果潜在返回值为“非0”,那么判断就为真,取值为1,此时prefa=1,如实际值为AB、BA、ABCD、DBFEA等是,潜在取值分别为1、2、1、5,都是“非0”,那么此时虚拟变量prefa=1;如果实际值为BC,那么潜在返回值为0,不是“非0”,此时虚拟变量prefa=0。
      依次类推,gen prefb=strpos(pref,"B")!=0;
                        gen prefc=strpos(pref,"C")!=0;
                        gen prefd=strpos(pref,"D")!=0;
                        gen prefe=strpos(pref,"E")!=0
                        gen preff=strpos(pref,"F")!=0
       可以分别产生出其他几个虚拟变量。
       对于严谨而注重秩序的学者,这几个命令还算简单、精准和高效吧。但是要注意一点哦,原始的字符变量(如本例中的pref)没有缺失观测值,如果有就drop if pref==.万事大吉;如果有缺失值又没drop掉,那么样本名义数目会增多,频率指标将会被低估,因为会有对应于所有虚拟变量,取值都为0的样本出现。不信,在脑子里面逻辑运算一遍试试看。不过,一开始您也可以不对缺失值进行处理,最后将虚拟变量取值同时为0的样本点drop掉,如本例中的命令是:drop if prefa==0&prefb==0&prefc==0&prefd==0&prefe==0&preff==0;还有一个办法,统计时加上不全为0的条件,本例中可以用sum pref* if prefa==1 | prefb==1 | prefc==1 | prefd==1 | prefe==1 | preff==1,即统计条件是至少有一个选项的虚拟变量为1(也就是不全为0)。OK,多选统计就这样搞定,千万不要再因数据录入员因为个别选项录入顺序混乱而苦恼了。还有一点要注意,如果选项达10个以上,用阿拉伯数字录入选项,那么至少从第十项开始,要用abcdef等替换掉10、11、12、13、14等,不然第九项之前的选项就可能会高估,原因很简单,比如真正的选项是12和15,那么统计时就会将1统计到选项1中,将2统计到选项2中,将5统计到选项5中,结果悲催吧!所以至少从10开始,必须用字母替换掉,这样结果就名副其实、一一对应了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有