之前让ChatGPT学习了生成测试数据集,连续型变量描述统计和组间比较,分类变量描述统计。卡方检验和fisher精确检验代码都非常简单,没有单独做分享。这些需求的特点是,实现的方法比较明确单一,相对固定,历史上的代码比较成熟。
要想实现将日期变量填补这一个需求。是需要进行逻辑判断的,能实现这个需求的代码也比较多样,需要自己进行搭配和组合。
首先将自然语言转换为编程逻辑,然后再从SAS的语法中选择合适的函数和语句,组合在一起来实现需求,对于初学者还是有一定难度的。特别是,如果不了解其中有的函数,就需要写更长的代码来替代。
首先把日期往前填补。如果日缺失,则填补为1日;如果月缺失,则填补为1月1日。
这里AI给出了一段代码,使用了MISSING, INDEX, SUBSTR, CATS INPUT函数。整体逻辑是不错,选用的SAS函数不算最简化的,但也能满足需求。在语法上,没有意识到YYMMDD10.格式的值是类似于”YYYY-MM-DD”这样的。需要将“01“和”0101“更新为”-01“和”-01-01“,整段代码就可以正常运行了。
然后把日期往后填补,如果日缺失,则填补为当月最后一天;如果月和日都缺失,则填补为当年最后一天。这比往前填补,难度更大。因为每个月的最后一天是不固定的。不能简单的拼接。
这里她想到使用INTNX来实现这个需求。但是语法并没有写对。她这里写出来的是,下一个月的最后一天,并且减1天。另外,这段代码的先后顺序也有问题,当变量DATE缺失时,本身缺失值无法在INTNX函数中运算。所以需要先对DATE变量进行一个填充。
这里,她对代码进行了简化。但是核心的需求还是没有实现。需要先对变量进行填补,然后再取当月或当年最后一天。
又跟AI扯了一会关于INTNX函数的应用。
让我们来看最终成果吧。
这里AI吸纳了我给他的代码,使用了LENGTH, INPUT, INTNX, STRIP, “||”等函数,完美地将日期填补为当月或当年最后一天。
整个代码从函数的选择,到语句的使用,到排版和缩进,到最后考虑了数据不满足前三种情况时预警,都很漂亮,没有什么可以挑剔的。
本文章首发于公众号【SAS编程未来】