【问题标题】:Listing nonmissing string variables in Stata在 Stata 中列出非缺失字符串变量
【发布时间】:2013-10-29 14:53:12
【问题描述】:

我想在 Stata 中显示 (list) 字符串变量 DE15_WHY 的值,仅当它没有丢失时(例如,某些主题没有提供 cmets)。我认为这很容易:

list DE15_WHY if DE15_WHY != ""

这会为所有主题显示DE15_WHY,即使它们在DE15_WHY 中没有任何内容...

字符串格式是否错误?例如,Stata 是否认为所有受试者对DE15_WHY 都有有效的观察?我该如何解决?我检查了,它被格式化为字符串变量。

Stata 还允许我tabulate DE15_WHY,类似于 R。这是一个很好的选择,但不会在表中显示字符串变量的全部内容。如何让 Stata 显示整个字符串?

【问题讨论】:

    标签: string stata


    【解决方案1】:

    @Metrics 的回答有几个很好的细节,但我会在这里添加更多。

    对于字符串变量,Stata 对缺失只有一个定义,即字符串为空,并且恰好不包含字符。

    一个或多个空格,尽管通常不会向人们传达任何信息,但就 Stata 而言,不符合缺失的条件。

    “空白”一词在这里可能不清楚,因此最好避免使用。

    如果空格以某种方式进入您的字符串变量,例如

       if trim(mystring) == "" 
    

    选择空值或带有空格的值以及相应的条件,例如

       if trim(mystring) != "" 
    

    选择具有其他内容的值。为了用空字符串替换空格,我们因此去

       replace mystring = "" if trim(mystring) == "" 
    

    一般来说,如果你有相当长的字符串,Stata 必然会出现在哪里显示它们的问题。一个提示是list 将显示比tabulate 更多。如果您想要tabulatelist 混合,请使用ssc inst groups 从SSC 查看groups

    虽然句点. 是Stata 中数值变量(或数值标量或矩阵元素)的默认值或系统缺失值,但它对字符串"." 没有任何特殊含义。

    【讨论】:

      【解决方案2】:
      sysuse auto
      list  rep78 in 1/10 if  rep78 !=. # for non-missing 
      tab  rep78  # default behaviour is to report only non-missing
      tab rep78, missing # if you want also missing
      

      如果变量是.指示的缺失字符串

      list yourvariable if yourvariable !="."
      

      如果变量是一个缺失的字符串,用空格表示

      list yourvariable if yourvariable !=""
      

      例子:

      my  my1
      ab  1
      cd  2
          3
      ef  4
      
      list  my if  my !=""
      
           +----+
           | my |
           |----|
        1. | ab |
        2. | cd |
        4. | ef |
           +----+
      

      tab 将同时处理空白和 .作为失踪。

      .

       tab my
      
               my |      Freq.     Percent        Cum.
      ------------+-----------------------------------
               ab |          1       33.33       33.33
               cd |          1       33.33       66.67
               ef |          1       33.33      100.00
      ------------+-----------------------------------
            Total |          3      100.00
      
      
      tab my,missing
      
               my |      Freq.     Percent        Cum.
      ------------+-----------------------------------
                  |          1       25.00       25.00
               ab |          1       25.00       50.00
               cd |          1       25.00       75.00
               ef |          1       25.00      100.00
      ------------+-----------------------------------
            Total |          4      100.00
      

      【讨论】:

      • 此外,条件if trim(my) == "" 将捕获字符串变量my 中一个或多个空格的情况。对于字符串变量,缺失意味着空,反之亦然。
      • > tab 会将空白和. 视为缺失。
        我要补充: ... 当变量分别是字符串和数字时。这让我有点困惑,因为有一分钟我认为. 可能代表字符串类型的缺失。
      • 感谢@Metrics,不过,!= "" 和 != "."产生相同的结果。显示所有主题,包括空格和字符串值的主题,而不是您在示例中获得的整洁输出。那么如何让选项卡显示字符串的全部内容 - 它在一定长度处被截断?
      • 没问题。在这种情况下,您需要提供示例数据,以便我们测试我们的代码。
      • 优秀的@NickCox - 您的代码用作:list DE15_WHY if trim(DE15_WHY) != "" 有效!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多