proc means:解决做table时遇到的问题简述
文章1
XTH,公众号:CDISC与SAS制作汇总表时不用dummy的方法,解决分类变量数据缺失-- proc means/ freq
文章2
徐XTH,公众号:CDISC与SAS如何按照TFL模板给出的顺序出表或者QC
之前文章介绍的方法,在实际工作当中碰到了些许问题。
产生问题的原因如下:
文章1:按条件筛选之后,待proc meas的数据集完全为空。
文章2:尽管按照proc format notsorted的顺序排列,但是当我们需要proc transpose的时候依然要重新排序。
文章1:
之前说过proc format和proc means的preloadfmt组合可以不用自建dummy数据,但是实践中发现了一个隐形条件:数据集必须存在format定义的任意一个value。换句话说数据集肯定不能为空。
解决方法:
proc format中新加一个定义:' ' = ' ',引号间要有空格。
同时空的数据集插入一条n=1的数据,这里n=1详看链接文章1。或者简单来说proc means里的参数var仅能计算数值,那么我直接n=1,这条观测的其他变量就都是=' '。
结论:
因为proc format和数据集都有了相同的value: ' ',那么就可以实现不用创建dummy的需求。所以说两边具有相同的value,才是能体现preloadfmt的真正价值。
文章2:
我们在用proc means的时候通常不会class一个变量,比如我想要计算不同性别的受试者在不同药物下的人数,那么自然class药物和性别。而且一般最终的展示是药物为纵列,性别为横行,那么肯定要transpose。
常用proc transpose应该知道要预先排序,但是如果按照我们proc format notsorted的排序是没办法操作的。
解决方法:
在proc means产生的数据集中生成一个id=_n_的变量,也就是让id记住当前proc format notsorted的排序,然后这个数据集当作dummy,再和transpose后的数据集merge,最后再按id排序即可。
结论:
此方法没什么新意,甚至还是需要构造dummy数据集,之后可以再研究下transpose有没有保留排序的方法。
总结:
实际做表的过程中发现,此一系列方法确实让代码简洁,且分割成块很容易理解。就算项目不同,复制过去更改的地方也只是format。推荐大家使用此方法,尽可能地把需要更改的地方集中在一块。
如有问题,欢迎后台私信讨论。