这让我困惑了一段时间,我还没有找到答案。
我正处于这样一种情况:我将标准化的数据清理过程应用于(据称)类似结构的文件,每年一个文件。我有一个如下声明:
replace field="Plant" if field=="Plant & Machinery"
这是基于第1年的数据文件的原始代码编写的结果。然后我概括了代码以循环遍历数年的数据。问题变成,如果在第3年,该变量中的类似值被编码为"Plant and MachInery "
,这样上面的代码行不会由于文本字符串的差异而进行预期的更改,但不会导致错误警告没有做出改变。
我所追求的是某种确认> 0观察实际上满足了每个实例代码在循环中执行的条件,否则返回错误。修剪,删除空格和标准化文本案例的任何组合都不是解决方法选项。同时,我不想在每个条件count if
之前添加assert
然后replace
语句,因为这会变得非常笨重。
除了转到原始文件以确保变量值是标准化的,有没有办法像我试图描述的那样“动态”进行验证?也许只写一个结合count if
,assert
和replace
的自定义程序?
答案 0 :(得分:2)
这个想法偶尔浮出水面replace
应该返回更改的观察数量,但是有很好的理由不这样做,特别是它不是任何方式的r级或e级命令,而且非常重要不要改变它的工作方式,因为这可能会破坏无数的程序和文件。
所以,我认为任何答案的本质是你必须建立自己的监控过程来计算已经(或将要)改变了多少个值。
一种模式是 - 处理current
变量时:
gen was = .
foreach ... {
...
replace was = current
replace current = ...
qui count if was != current
<use the result>
}