0

我想为所有不以 x 开头的变量添加前缀或后缀:

clear
input xa xb c d
1 1 1 1
end

我想是这样的:rename (!x)* y*应该给出这样的结果:xa xb yc yd。感谢您的任何提示。

4

2 回答 2

2

可以避免foreach循环

. rename (`r(varlist)') (y=)

于 2012-11-26T17:04:27.610 回答
1

这在我看来并不理想,但在我的脑海中,也许类似的东西renpfix可能对你有用:

. clear
. input xa xb c d
            xa         xb          c          d
  1. 1 1 1 1
  2. end
. list

     +-----------------+
     | xa   xb   c   d |
     |-----------------|
  1. |  1    1   1   1 |
     +-----------------+

. renpfix "" y
. renpfix yx x
. list

     +-------------------+
     | xa   xb   yc   yd |
     |-------------------|
  1. |  1    1    1    1 |
     +-------------------+

在这里,我首先为所有变量添加了前缀,因此前两个变量的前缀为yx; 然后我替换了yx前缀以返回x前两个变量。

更新

另一种选择是使用dsor findname(install using search findname) 并使用not参数来否定匹配的变量

. clear
. input xa xb c d
            xa         xb          c          d
  1. 1 1 1 1
  2. end
. list

     +-----------------+
     | xa   xb   c   d |
     |-----------------|
  1. |  1    1   1   1 |
     +-----------------+

. ds x*, not
c  d

. foreach v in `r(varlist)' {
  2. rename `v' y`v'
  3. }
. list

     +-------------------+
     | xa   xb   yc   yd |
     |-------------------|
  1. |  1    1    1    1 |
     +-------------------+

ds并将findname其结果存储在 中`r(varlist)',以便您foreach在识别相关变量后使用。

于 2012-11-22T11:22:29.790 回答