format过程自行创建的格式可以在加工步或数据步加强对输出变量值的描述。这时需要首先调用format过程,以便建立替换格式,替换格式用若干个替换格式名表示;然后在加工或数据步建立format语句,其中的一些变量关联替换格式名,这样一来,在加工步或数据步的输出中,这些变量值就被相应替换了。
例5.6 连续5日的澳元、瑞士法郎、欧元和英镑的汇率如表3-1所示,把它们按连续数据输入法读入成SAS数据集。试将外币符号转换成中文。
解 先用format过程建立外币符号替换成中文的替换格式,因为被替换的只有一个变量type,所以只要一条value语句,可把替换格式名取为typename,以便对应。再在数据步加入format语句,使替换得以成功。注意format语句必须加在input语句之前,替换格式名符号要加圆点。程序如下:
得到的输出是:
例5.7 调查3家医院的患者、药费和年龄,得到一个统计表(表5-3),存于D:\wu\medicine.txt,其中1表示xxxx医院,2表示yyyy医院,3表示zzzz医院。试用format过程把它们的输出变得更明确,即把数字1、2、3改为医院名,按照年龄段分组用字符表示:[0,3)表示baby(婴儿),[3,13)表示child(儿童),[13,20)表示teenager(青少年),[20,65)表示adult(成年人),65以上表示senior(老年人)。
表5-3 3个医院的调查数据
解 在数据步调用替换格式,通过format过程和数据步的format语句结合,实现上述替换。为了检验效果,打印该数据集到Output窗口。
具体编程步骤是:先用format过程建立替换格式,hospname作为变量hospital值的替换格式名,agename作为变量age值的替换格式名,用baby,child……来分段替换变量age的值;然后把文件D:\wu\medicine.txt用infile语句导入,成为数据集medipay,即用infile语句将它拷入数据集medipay;在input语句之前再加入format语句,将变量hospital和hospname关联,变量age与agename关联。
具体程序如下:(www.xing528.com)
提交后得到的输出是:
以上是数据集medipay在数据步用format过程改善后的输出结果,变量值都换成信息较丰富的形式。
由打印结果可见,例5.6和例5.7这种在数据步调用format语句的方法完全有效。这种在数据步调用format语句的方法在有较复杂加工步时也可使用。本书提倡使用这种在数据步调用format语句的方法,它能在各处使用,无需再调用format语句,因为只要在数据步加了format语句,以后该数据集的任何加工步都不需再使用format语句。
练习题1 打印例5.7的数据集medipay,输出采用中文替换格式:1改为某某市人民医院,2改为某某市口腔医院,3改为某某市中医院,baby改为婴儿,child改为儿童……
练习题2 假设有4个病人的医疗费数据如表5-4所示。
表5-4 4个病人的医疗费数据
其中,a、b、c分别是医院名“某某市人民医院”、“某某市口腔医院”、“某某市中医院”。请按照例5.6那样建立SAS数据集,再用sort过程排序,by变量是医院名。注意打印输出中,医院的先后顺序不是按中文名称排序,而是按照a、b、c排序。这是因为执行sort过程时用a、b、c作为医院名排序,从而输出时得到的中文医院名不参加排序。
提示:可以采用如下程序:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。