学习笔记101-sas宏变量(sql+宏建立多表)

太久没有记录了,上次差不多是半年前了。工作之后就太忙了,也抽不出时间来记录。

现在就回来记录一些吧,要学的有些杂,笔记也会记得很杂。

现在有一个任务:有一个表cars,其中的make列有多个汽车品牌,现在依据不同的汽车品牌将表进行拆分,每个子表对应一个类型的汽车。

教学书中的解法:

因为要建多个子表,所以用到了do循环,循环要用到数字1 to n,所以这里先将汽车品牌进行映射

使用proc format的方式进行映射,后面可以直接使用 put(&i , carname.)的方式取出对应的品牌名。

接下来就是使用sas中的do循环来进行循环建表了

和我想的一样,建立一个宏函数,在其中调用do循环和if判断。

这种方法确实可行,但其实有一个巨大的坑,那就是一开始的映射,你三个汽车品牌可以自己挨个写,那如果有30个呢?如果有300个呢?

新的解法:
新的解法使用proc SQL与宏函数结合来解这个问题(毕竟SQL写得习惯了)

首先获得汽车的品牌列表

然后定义宏来拆分表格

这里解释一下这个sysfunc(countw(&car_brands));这一行代码

这个countw的作用就是以空格为分割符进行计数,因为上面获取列表的时候就是用空格进行分割的。

而sysfunc的这个函数的意思是让一些不是宏函数的函数再宏中也能发挥作用。

%let brand = %scan(&car_brands, &i);这行命令就是取出这个值

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容