【问题标题】:SAS delete row when a column is non numeric当列不是数字时,SAS删除行
【发布时间】:2021-10-13 14:55:40
【问题描述】:

我在 SAS 中有这个数据集学生,我计划删除成绩为非数字的记录(行)。我尝试了以下代码,但没有奏效。我试过'如果等级=。然后删除;'以及它仍然没有工作。我不想替换这些值,我只想删除该行。对此有何想法?

data student;
infile datalines firstobs=2 dsd truncover; 
input student$ class$ grade; 
datalines;
student, class, grade 
Jansen, Brave, A
Yassin, Brave, 70
Benison, Brave, 67
Yan Jin, Brave, E
James, Hero, 90 
Michelle, Hero, 89
Hiroku, Hero, C 
Misoku, Hero, 93
;
run; 

data student_cleaned; 
set work.student; 
if not (anyalpha(grade)) then delete; 
run; 

【问题讨论】:

    标签: sas


    【解决方案1】:

    在第一步中,您将年级读为数字。这意味着 SAS 已经从该数据集中删除了任何字符。将其作为字符读入,然后您可以进行第二步。在成绩后添加 $ 以将其作为字符值读入。

    字面意思是一个字符的变化;)

    data student;
    infile datalines firstobs=2 dsd truncover; 
    input student$ class$ grade $; 
    datalines;
    student, class, grade 
    Jansen, Brave, A
    Yassin, Brave, 70
    Benison, Brave, 67
    Yan Jin, Brave, E
    James, Hero, 90 
    Michelle, Hero, 89
    Hiroku, Hero, C 
    Misoku, Hero, 93
    ;
    run; 
    
    data student_cleaned; 
    set work.student; 
    if anyalpha(grade) then delete; 
    run; 
    

    【讨论】:

      【解决方案2】:

      您已经将 GRADE 视为数字变量。 A 或 E 等单字母代码将映射到 .A 或 .E 等相应的特殊缺失值。任何其他文本都将映射到常规缺失。

      您可以使用 MISSING() 函数来测试其中任何一个。

      if missing(grade) then delete; 
      

      【讨论】:

      • 谢谢汤姆。我一直认为在没有缺失值的情况下使用missing()。现在明白了!
      • 如果我有一个名为 'student.grade' 的列并且我尝试了 if missing('student.grade'n) 然后删除;它不能工作。请问我该如何解决?
      • 如果 'student.grade'n 是字符变量,那么 missing() 函数不会认为像 'A' 或 'B' 这样的值缺失。请注意,您必须将 VALIDVARNAME 选项设置为 ANY 才能使用带有句点的变量名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多