SAS 检测并纠正数据库中的拼写错误

SAS detect and correct typo errors in data base

我有一个包含 50 个 obs(员工)和多个变量的数据库: 问题 q1,q2....,q10 => q1-q10,满意度等级为 1-5 标度为 1 和 0 的性别 等级为 1=已婚 0=单身的状态 收入 重量 教育年限 等等..

已知数据有错别字 errors.I 需要 运行 遍历数据库并检测: 哪些变量有拼写错误 哪些(obs)员工有错误

如何定义条件? 例如:错误可能是两位数(性别=00 而不是 0),或者值超出范围 (q2=8)。 我应该分别为每个变量定义错误吗? 对于明显的错误,在 var=education years 中检测错误很容易,但一般来说,我是否做 "where weight=<0" 因为它只是常识?

proc print data=comb;
where inc<0;
where gender ne 0&1;
where married ne 0&1;
where q1-q10 ne 1-5;
where w=<0;
where h=<0;
where edc<0;

检测到错误后我需要更正它们: 如果两个数字相似(例如性别=00)。我应该只展示其中一个 => (gender=0)。 那么我怎样才能只打印第一个数字(对于这个特定的更正?) 如果值超过规模转向缺失。 再次,我是否分别为每个 var 执行此操作?

data comb;
if gender ne 0 & 1 then gender=
else if  married ne 0&1 then married=
else if q1-q10 ne 5-10 then q1-q10='';
else if 
run;

无论哪种方式,我都不确定如何正确构建这些条件。

除了像您一直在做的那样定义标准之外,没有快速的方法来 identifying/correcting 错误。但是,您似乎知道需要纠正什么以及如何纠正的标准。 SAS 需要通过的遍数越少越好,这在这种情况下是好的,因为您可以在同一次遍历数据时识别并更正它们。

我不确定您是否需要确定哪些记录已更正错误,但我在下面包含了 do 循环以另外设置 cleanflg=1 - 或者您可以将此交换为将消息发送到日志文件(例如putlog "NO" "TE: Variable Gender has been corrected from the original value of " gender= ;(例如):

data clean ;
  set dirty ;
  array Q[10] q1-q10 .;

  if inc<0 then cleanflg=1 ; *Although assume it may be better to delete;

  if gender not in('0','1','00') the do ;
    cleanflg=1 ;
    gender=.;
  end ;

  if married not in(0,1) then do ;
    cleanflg=1 ;
    married=.;
  end ;

  *Loop through Question array to set to missing if outside required range ;
  do i=1 to 10 ;
    if Q[i] > 5 or Q[i]<1 then do ;
      cleanflg=1 ;
      Q[i]=. ;
    end ;
  end ;
run ;