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

时间:2015-05-15 16:12:36

标签: database error-handling sas detect

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

众所周知,数据存在拼写错误。我需要遍历数据库并检测: 哪些变量有错字错误 哪(员工)员工有错误

我该如何定义条件? 例如:错误可能是两位数(性别= 00而不是0),或者值超过规模(q2 = 8)。 我应该分别为每个var定义错误吗? 对于显而易见的,它很容易,但一般来说,检测var =教育年份的错误,我做“重量=< 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)。我应该只展示其中一个=&gt; (性别= 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;

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

1 个答案:

答案 0 :(得分:0)

除了像您一直在做的那样定义标准之外,没有快速识别/纠正错误的方法。但是,您似乎知道需要纠正的标准以及如何纠正它。 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 ;