将所有字符串变量的显示格式更改为尽可能短

时间:2014-10-08 17:09:49

标签: printf stata

compress我的数据之后,我有几个字符串变量,其存储类型为str4str1,格式为%9s。我想将它们全部恢复为默认显示格式,help dformat %#s报告应为str# ds, has(type string) foreach v of varlist `r(varlist)' { format `v' } 。有快速的方法吗?

这是我最好猜测的结构:

format

这不起作用,因为clear input str50 mystr "b" "a" end compress format myst 函数不是使用此命令重新格式化为默认值,而是显示格式。


可重现的例子:

strL

这是我遇到的情况。我不确定它是否适用于browse格式化变量。 (罗伯托怀疑它没有;见评论。)

附录。我的目标是让format - 更容易理解我的数据。似乎{{1}}在浏览器中受到尊重(例如,截断为%1s的长度),而在打印到控制台时,它会被字符串的实际长度覆盖。

1 个答案:

答案 0 :(得分:3)

我很惊讶您似乎感到惊讶,因为您的语法format命令(不是函数)确实只显示格式,如文档所述。顺便说一句,您不需要循环来执行此操作,因为format varlist 作为参数:

. clear

. set obs 1
obs was 0, now 1

. foreach t in a b c {
2. gen `t' = "`t'"
3. }

. format a b c

variable name  display format
-----------------------------
a              %9s
b              %9s
c              %9s
-----------------------------
Joshing分开,我认为你这里只需要一行,就像

. format a b c %1s 

. format a b c %-1s

表示哪种理由。 Stata不会因为它们与字符串显示格式不匹配而截断显示的字符串。它可能会截断字符串,因为没有空间来显示它们,但是(我自然会打开反例)上述变量的显示格式对于大多数用途都会很好。

编辑:以下设备可能有所帮助。

  gen length = 0 

  ds, has(type string) 
  quietly foreach v in `r(varlist)' {
      replace length = length(`v') 
      su length, meanonly 
      format `v' %`r(max)'s 
  }

  drop length