【问题标题】:Attempting to identify non-integer values using for loop尝试使用 for 循环识别非整数值
【发布时间】:2021-12-08 14:53:05
【问题描述】:

我试图在 Stata 中识别不是整数的值。我的数据集如下:

var1  var2  var3
1     2     3
2     4     5
3     6     7
4     2     3 
5     1     1
6     2     8

我的代码如下:

foreach var in var1 var2 var3 {
   gen flag_`var' = 1 if format(`var') == %int
   replace flag_`var' = 0 if flag_`var' ==.

我收到一条错误消息说明

unknown function format()
}

我还尝试将 format(`var') 周围的括号替换为 format[`var'],但随后出现错误,指出未找到格式。我使用的格式有问题还是有更好的方法来识别非整数值?

【问题讨论】:

  • 请回复@dimitriy 对您上一个问题的回答,接受答案或解释为什么它不是您想要的。

标签: stata


【解决方案1】:

第一个答案是Stata告诉你的:没有format()函数。

但更深层次的答案是,考虑(显示)格式对于这个问题是错误的。显示格式本质上是一个指令,以某种方式显示数据,与它的存储值无关,或者更准确地说是其存储值的十进制等值。因此,以%4.3f 格式显示的 42 显示为 42.000,而以%1.0f 格式显示的 6.789 显示为 7。否则,没有值具有固有格式,但显示格式用于显示值,默认情况下或因为用户指定了格式。 Stata 在这里只是使用与 C 和各种类 C 语言相同的广泛思想。

与其存储值无关有点夸张,因为只有数字格式对数字有意义,只有字符串格式对字符串有意义,但显示格式与是否存储无关值是整数。

进一步%int 无论如何都不是显示格式。在检查格式时,它们将是包含在 "" 中的文字字符串。

可以使用各种方法来显示非整数,例如使用舍入函数,例如 round()int()floor()ceil()。因此,x 是否为整数的指标可以是

 gen is_int_x = x == floor(x) 

您的数据示例中的所有值都是整数,但我认为您正在其他地方寻找非整数。

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 2017-05-07
    • 2016-09-16
    • 2017-06-02
    • 2015-09-28
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多