欢迎光临散文网 会员登陆 & 注册

SAS 程序分享:删除完全缺失的变量(2)

2023-06-21 19:29 作者:SAS骆豪  | 我要投稿

在上一篇文章中,我分享了一种删除完全缺失的变量的方法:SAS 程序分享:删除完全缺失的变量 - 哔哩哔哩 (bilibili.com),其中,我通过文件 I/O 函数来判断变量是否 100% 缺失。由于我在判断完成后,将待删除的变量列表存储到一个长度为 32767 的变量中,这限制了原程序能够处理的变量数量。

昨天我见到了一种基于 proc freq 过程步的 nlevels 选项的原型方法1,经过改造之后,新的方法比原方法更快,没有变量数量的限制,而且编写和理解起来都更为容易:

proc freq 过程步的 nlevels 选项指定对分析变量的水平数(即变量有多少种不同取值)进行计算,当观察到计算结果中,非缺失水平数为 0 时,就可以认定该变量是完全缺失的。该过程步没有显式指定待分析的变量,默认将所有变量都纳入分析。示例程序中的数据集 _nlevels_ 见下图:

示例程序给出的 _nlevels_ 数据集

接着,再利用 call execute() 子程序和字符串拼接,来动态生成和调用删除变量的程序。

要提醒的是,示例程序中合理利用了 ods select 语句,保证仅有数据集作为输出目标,而不是 listing 和 html。这个技巧也可以用在其它程序中,在处理大型数据集时,这可以节省不少系统开销。


参考:

[1]: https://communities.sas.com/t5/SAS-Programming/Identify-constant-columns-in-a-dataset/m-p/881509#M348312

SAS 程序分享:删除完全缺失的变量(2)的评论 (共 条)

分享到微博请遵守国家法律