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 ;
我有一个包含 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 ;