【问题标题】:Generate variable containing number of characters in a string variable生成包含字符串变量中字符数的变量
【发布时间】:2015-08-05 17:48:35
【问题描述】:

在调查数据集中,我有一个带有定性响应的字符串变量(类型:str244)。我想计算每个响应/字符串中的字符数并生成一个包含该数字的新变量。

使用egenmore我已经用nwords计算了字数,但是我找不到计数字符的对应项。

示例:

egen countvar = nwords(stringvar)

其中countvar 是新变量名,stringvar 是字符串变量。

这样的egen 函数是否存在用于计数字符?

【问题讨论】:

  • Stata 中的函数wordcount() 使旧的附加组件nwords() 变得多余。注意egenmore 是使用ssc inst egenmore 下载的。
  • egenmore 的帮助确实指向 wordcount()。注: nwords()(为 Stata 6 编写)非常慢。
  • 感谢您提及这一点。 gen countvar = wordcount(stringvar) 就像一个魅力。我不知道wordcountgen 一起使用,而不是egen。完美!

标签: stata


【解决方案1】:

没有egen 函数,因为长期以来[原文如此] 严格意义上的函数可以做到这一点。在最新版本的 Stata 中,该函数称为 strlen(),但旧名称 length() 仍然有效:

. sysuse auto
(1978 Automobile Data)

. gen l1 = length(make)

. gen l2 = strlen(make)

. su l?

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
          l1 |         74    11.77027    2.155257          6         17
          l2 |         74    11.77027    2.155257          6         17

help functions(e.g.) this tutorial column

【讨论】:

  • 如何计算数字变量中的数字?
  • 这确实是一个新问题,因为存在细微差别。你的意思是整数还是包括小数部分?如果您指的是整数,log10(x) + 1 是一个好的开始。如果您包含带小数部分的数字,那么在不知道显示格式的情况下问题会变得更加混乱。
【解决方案2】:
. sysuse auto,clear
(1978 Automobile Data)

. tostring price, gen(price1)
price1 generated as str5

. gen l3=length(price1)

. sum l3

    Variable |        Obs        Mean    Std. Dev.       Min        Max

          l3 |         74    4.135135    .3442015          4          5

【讨论】:

  • 如果你想要数字变量的计数
  • 这看起来很幼稚。请参阅我的答案下方的评论。数字变量的“长度”仅在某些情况下才被明确定义。在您的示例中,price 报告为正整数,因此您无需转换为字符串变量。您只需通过ceil(log10()) 推送最大值。对于任何数值为负数或包含小数部分的变量,您的代码可能会出现问题,具体取决于精度问题和您想要的精确值。
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
相关资源
最近更新 更多