SAS 程序分享:刪除完全缺失的變量(2)
在上一篇文章中,我分享了一種刪除完全缺失的變量的方法:SAS 程序分享:刪除完全缺失的變量 - 嗶哩嗶哩 (bilibili.com),其中,我通過文件 I/O 函數(shù)來判斷變量是否 100% 缺失。由于我在判斷完成后,將待刪除的變量列表存儲到一個長度為 32767 的變量中,這限制了原程序能夠處理的變量數(shù)量。
昨天我見到了一種基于 proc freq 過程步的 nlevels 選項的原型方法1,經(jīng)過改造之后,新的方法比原方法更快,沒有變量數(shù)量的限制,而且編寫和理解起來都更為容易:
proc freq 過程步的 nlevels 選項指定對分析變量的水平數(shù)(即變量有多少種不同取值)進行計算,當觀察到計算結果中,非缺失水平數(shù)為 0 時,就可以認定該變量是完全缺失的。該過程步?jīng)]有顯式指定待分析的變量,默認將所有變量都納入分析。示例程序中的數(shù)據(jù)集 _nlevels_ 見下圖:

接著,再利用 call execute() 子程序和字符串拼接,來動態(tài)生成和調(diào)用刪除變量的程序。
要提醒的是,示例程序中合理利用了 ods select 語句,保證僅有數(shù)據(jù)集作為輸出目標,而不是 listing 和 html。這個技巧也可以用在其它程序中,在處理大型數(shù)據(jù)集時,這可以節(jié)省不少系統(tǒng)開銷。
參考:
[1]:?https://communities.sas.com/t5/SAS-Programming/Identify-constant-columns-in-a-dataset/m-p/881509#M348312
標簽:SAS