• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

选择所有缺失值的字符变量

sql 来源:Lauren Samuels 7次浏览

我有一个包含大约3000个变量的SAS数据集,并且我想摆脱所有缺失值的字符变量。我知道如何为数字变量做这个事情 – 我特别想知道字符变量。我需要使用基础SAS来完成这项工作,但这可能包括proc SQL,这也是我为什么也标记了这个’SQL’的原因。
谢谢!选择所有缺失值的字符变量

编辑:
背景信息:这是一个很高的数据集,包含来自7次访谈的调查数据。一些但不是全部的调查项目(变量)在波浪中重复。我试图通过拉取所有波形的记录来创建实际用于每个波形的项目列表,摆脱除SAS以外的所有缺省值的所有列,然后运行proc contents


===========解决方案如下:

我创建了一个宏来检查空字符列,并将它们从原始列中删除,或者创建一个删除了空列的新数据集。它有两个可选参数:数据集的名称(默认是最近创建的数据集)以及用于命名新副本的后缀(将后缀设置为无需编辑原始数据)。

它使用proc freq与levels选项和自定义格式来确定空字符列。 proc sql然后用于创建要删除的列的列表并将它们存储在宏变量中。

下面是宏:

%macro delemptycol(ds=_last_, suffix=_noempty); 

option nonotes; 
proc format; 
    value $charmiss 
    ' '= ' ' 
    other='1'; 
run; 
%if "&ds"="_last_" %then %let ds=&syslast.; 

ods select nlevels; 
ods output nlevels=nlev; 
proc freq data=&ds.(keep=_character_) levels ; 
    format _character_ $charmiss.; 
run; 
ods output close; 

/* create macro var with list of cols to remove */ 
%local emptycols; 
proc sql noprint; 
    select tablevar into: emptycols separated by ' ' 
    from nlev 
    where NNonMissLevels=0; 
quit; 

%if &emptycols.= %then %do; 
    %put DELEMPTYCOL: No empty character columns were found in data set &ds.; 
    %end; 
%else %do; 
    %put DELEMPTYCOL: The following empty character columns were found in data set &ds. : &emptycols.; 
    %put DELEMPTYCOL: Data set &ds.&suffix created with empty columns removed; 
    data &ds.&suffix. ; 
    set &ds(drop=&emptycols); 
    run; 
%end; 
options notes; 

%mend; 

例子用法:

/* create some fake data: Here char5 will be empty */ 
data chardata(drop= j randnum); 
length char1-char5 $8.; 
array chars(5) char1-char5; 
    do i=1 to 100; 
    call missing(of char:); 
    randnum=floor(10*ranuni(i)); 
    do j=2 to 5; 
     if (j-1)<randnum<=(j+1) then chars(j-1)="FOO"; 
    end; 
    output; 
    end; 
run; 

%delemptycol(); /* uses default _last_ for the data and "_noempty" as the suffix */ 
%delemptycol(ds=chardata, suffix=); /* removes the empty columns from the original */ 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)