136:proc report(六讲)--ASIS=ON/ORD
刚算了一下这几个月的空调电费,我去,才花了23块钱,我也被我的节省吓到了,吓得我赶紧打开空调凉快一下。
今天摸鱼一下,就介绍proc report里面的两个选项,都是实际工作中很常见的选项。
1:ASIS=ON
有时候我们写table,输出report的时候需要空格,尤其是SOC-PT table,LB相关table...有的公司可能喜欢直接用空格来空两格或者空四格,有的公司可能喜欢用@w@w或者^w^w来代替空格,都可以。
但是的话,如果你用空格的话,需要在写proc report的时候加上
style(column)=[cellwidth=30% just=left asis=on]选项,要不然你提前在数据集设置好了空格,结果输出report的时候发现并没有空格,然后百思不得其解,就是因为少了这个选项,不过我还是喜欢用逃逸符加上w来实现空格的效果。
2:在输出report的时候,尤其是Listing,对于重复出现的值,我们需要order一下,这样输出listing的时候,只会在第一行出现结果。
然后我们可能会看到order=data或者order=internal这两个选项。
GROUP, ORDER, or ACROSS等 report-items的值都是自动排序的,默认的排序是FORMATTED.
一般来说,在输出数据集用于QC的时候,就得提前排序,比如写一个LB相关的listing,我们一般按照SUBJID,PARAMN,VISITNUM,LBDTC排序,也就是我们默认report输出的时候就是按照这个排序输出listing。
但是用order=data选项的时候,有时候会发现listing中的顺序并不是你期望的那样子,我遇到了好几次,比如说周期12的数据跑到了周期6的前面,这明显是不合理的。
所以在这里顺便说一下,写listing不是数据集QC上就可以了,拜托你们打开word看一下输出,看看列标题显示正确与否,数据的顺序是否合理,如果有分页的话看看分页是否合理!!!
PROC REPORT根据该变量的值在输入数据集中所有观测值中出现的顺序建立排序。如果只有一个变量,用order=data一般是没有问题的,但是如果有多个变量,可能就会出现问题了。
比如下面这个例子,我自己用数据试了一下,发现还是按照正确的顺序输出,所以你们看这个书中的例子,实际工作中确实是可能遇到的。
数据集是按照这个顺序输出的,看起来没问题,然后我们
proc report data=temp1;
column var1 var2;
define var1 / group;
define var2 / group order=data;
run;
发现A显示正常,但是B的99跑到3前面去了。为什么会这样?
使用ORDER=DATA定义的变量可能嵌套在另一个GROUP/ORDER变量中或在BY组中,也就是说在A中99是第3位出现的,那么B就受到A的影响,先按照A中的数字顺序,也就是先出现99,所以才会出现99在3前面。
但是用order=internal选项可以避免这个问题,order=internal就是按照数据集本身的排序(也就是你前面排序过的顺序)输出。
但是我感觉order=internal应该也会有些问题,所以还是要打开输出看看呐!