【问题标题】:confirm conditional statement applies to >0 observations in Stata确认条件语句适用于Stata中> 0个观察值
【发布时间】:2013-11-19 20:57:54
【问题描述】:

这件事让我困惑了一段时间,我还没有找到答案。

我的情况是,我正在对(据说)类似结构的文件应用标准化的数据清理流程,每年一个文件。我有如下声明:

replace field="Plant" if field=="Plant & Machinery"

这是基于第一年的数据文件编写的原始代码的结果。然后我将代码概括为循环遍历这些年的数据。如果在第 3 年,该变量中的类似值被编码为 "Plant and MachInery ",那么问题就变成了,这样由于文本字符串的差异,上面的代码行不会进行预期的更改,但不会导致错误警告没有做出改变。

我所追求的是某种确认 >0 观察实际上满足每个实例代码在循环中执行的条件,否则返回错误。修剪、删除空格和标准化文本大小写的任何组合都不是解决方法选项。同时,我不想在每个条件 replace 之前添加 count ifassert 语句,因为这会变得非常庞大。

除了查看原始文件以确保变量值是标准化的之外,还有什么方法可以像我试图描述的那样“即时”进行验证?也许只是编写一个自定义程序,结合count ifassertreplace

【问题讨论】:

    标签: validation loops replace stata


    【解决方案1】:

    这个想法偶尔会浮出水面,replace 应该返回更改的观察次数,但有充分的理由不这样做,特别是它不是 r-class 或 e-class 命令,重要的是不要改变它的工作方式,因为这可能会破坏无数的程序和执行文件。

    所以,我认为任何答案的本质是您必须建立自己的监控过程,计算有多少值已经(或将要)改变。

    一种模式是 -- 在处理 current 变量时:

    gen was = . 
    
    foreach ... { 
         ... 
         replace was = current 
         replace current = ... 
         qui count if was != current 
         <use the result> 
    } 
    

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 2019-10-14
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多