gpt4 book ai didi

sql - 选择包含所有缺失值的字符变量

转载 作者:行者123 更新时间:2023-12-05 00:06:23 26 4
gpt4 key购买 nike

我有一个包含大约 3,000 个变量的 SAS 数据集,我想去掉所有值都缺失的字符变量。我知道如何对数字变量执行此操作——我特别想知道字符变量。我需要使用基本 SAS 来完成这项工作,但这可能包括 proc SQL,这就是我也将这个标记为“SQL”的原因。
谢谢!

编辑:
背景信息:这是一个高数据集,包含来自 7 波采访的调查数据。一些(但不是全部)调查项目(变量)在波浪中重复。我正在尝试通过提取该 wave 的所有记录来创建每个 wave 中实际使用的项目列表,删除除 SAS 默认缺失值之外一无所有的所有列,然后运行 ​​proc contents .

最佳答案

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

它使用带有级别选项和自定义格式的 proc freq 来确定空字符列。然后使用 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 */

关于sql - 选择包含所有缺失值的字符变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com