楼主: 天斯吾下
3752 15

[编程问题求助] 删除第三行为空的所有变量,代码报错invalid syntax [推广有奖]

11
蓝色 发表于 2015-8-7 23:01:33
现在有没有问题了,是原来那里引号的问题
. list
     +---------+
     | x1   x2 |
     |---------|
  1. |  1    1 |
  2. |  2    2 |
  3. |       3 |
  4. |  4      |
  5. |  5    5 |
     +---------+
. ds
x1  x2
. global a = r(varlist)
.
. foreach v in $a {
  2. if `v'[3]=="" {
  3. drop `v'
  4. }
  5. }
.
. list
     +----+
     | x2 |
     |----|
  1. |  1 |
  2. |  2 |
  3. |  3 |
  4. |    |
  5. |  5 |
     +----+

12
天斯吾下 学生认证  发表于 2015-8-7 23:48:48
夏目贵志 发表于 2015-8-7 22:53
我始终没看懂问题是什么。你给的那个例子没问题啊。你要是想要不一一写出变量名,就用
foreach v of var ...
原来如此,受教了,其实我就是在纠结如何把所有变量放入暂元中,既然有
foreach v of varlist _all { 这个命令,问题就解决了

13
天斯吾下 学生认证  发表于 2015-8-7 23:55:54
蓝色 发表于 2015-8-7 23:01
现在有没有问题了,是原来那里引号的问题
. list
     +---------+
知道为什么了,global a r(varlist)和global a =r(varlist)不一样global a =r(varlist)就可以,global a r(varlist)则不行

14
天斯吾下 学生认证  发表于 2015-8-8 00:26:31 来自手机
蓝色 发表于 2015-8-7 23:01
现在有没有问题了,是原来那里引号的问题
. list
     +---------+
虽然问题解决了,但是我想知道原理。请问对于暂元的定义来说,空格与等号的意义分别是什么?或者说区别是什么?

15
夏目贵志 发表于 2015-8-8 00:33:01
天斯吾下 发表于 2015-8-8 00:26
虽然问题解决了,但是我想知道原理。请问对于暂元的定义来说,空格与等号的意义分别是什么?或者说区别是 ...
等号evaluates an expression,空格没有这个功能
你试试
global a 3+2
global b = 3+2
di "$a"
di "$b"

16
liuding1111 发表于 2015-8-8 08:47:31
确实是引号的问题,global a r(varlist)和global a =r(varlist)应该都可以的,但是在if "`v'"[3]=="" 中,"`v'"被识别为一个宏而非变量,所以"`v'"[3]是错误的语法,`v'则被识别为变量。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-19 13:41