gpt4 book ai didi

sas - 删除字段包含空值的行

转载 作者:行者123 更新时间:2023-12-02 21:20:11 26 4
gpt4 key购买 nike

我有以下数据集

col1 q1 q2 q3 q4 q5 
a - 2 1 2 2
b - - - - -
b 1 2 - - -
d 3 - - - -

我想在 SAS 中应用一个条件,允许我删除所有列(q1 到 q5)均为空的情况。我想看到这个:

col1 q1 q2 q3 q4 q5 
a - 2 1 2 2
b 1 2 - - -
d 3 - - - -

最佳答案

我能找到的最优雅的解决方案是:

data want;
array q[5];
set have;
if max(of q[*]) = . then delete;
run;

逐步

  • data 语句设置输出数据集
  • array 语句初始化一个名为 q 的 5 元素数组
  • set 语句引入输入数据集。由于输入数据集具有名为 q1...q5 的变量,因此这些变量将填充到数组中。
  • if 语句:在 SAS 中,任何数值都大于缺失值,因此任何缺失最大值的情况都意味着 q 的所有值都缺失。 max(of q[*]) 语法只是返回数组 q 的所有(* 用于表示所有)元素的最大值。 delete 会先删除符合条件的观测值,然后再将其加载到输出数据集。
  • run 语句 - 数据步边界

没有数组

感谢 SRSwift

data want;
set have;
if max(of q:) = . then delete;
run;

使用 n 函数

感谢乔:

data want;
set have;
if n(of q:);
run;

正如 Joe 在评论中所解释的那样,n 计算非缺失值,并且后跟条件的 if 语句仅允许观察结果传递到输出数据集:该条件为真(或非零整数)。在全部缺失的情况下,n 函数返回零,不满足条件并删除观测值。

为了说明这一点,这里再次是输入数据集,添加了一个 n 列:

col1 q1 q2 q3 q4 q5 n 
a . 2 1 2 2 4
b . . . . . 0
b 1 2 . . . 2
d 3 . . . . 1

关于sas - 删除字段包含空值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28224081/

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