楼主: 天斯吾下
3722 15

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

  • 7关注
  • 4粉丝

已卖:11份资源

副教授

53%

还不是VIP/贵宾

-

威望
0
论坛币
1176 个
通用积分
87.5911
学术水平
8 点
热心指数
14 点
信用等级
7 点
经验
92 点
帖子
443
精华
0
在线时间
713 小时
注册时间
2013-3-6
最后登录
2021-7-19

楼主
天斯吾下 学生认证  发表于 2015-8-7 00:12:38 |AI写论文
66论坛币
我把要处理的变量存在a这个全局暂元中,然后执行以下代码
  1. foreach v in $a {
  2. if `v'[3]=="" {
  3. drop `v'
  4. }
  5. }
复制代码
invalid syntax
r(198);
下面的方法也不行,但是全局暂元a中并没有名字为varlist的变量
  1. foreach v of varlist $a{
  2. if `v'[3]=="" {
  3. drop `v'
  4. }
  5. }
复制代码
variable varlist not found
r(111);

stata13/14 都试过了,报一样的错,应该不是软件问题

最佳答案

夏目贵志 查看完整内容

$a是怎么设定的?
关键词:invalid SYNTAX Valid tax INV invalid

回帖推荐

夏目贵志 发表于10楼  查看完整内容

我始终没看懂问题是什么。你给的那个例子没问题啊。你要是想要不一一写出变量名,就用 foreach v of varlist _all { 至于[]的写法,确实没问题的。我一直都这么用。

沙发
夏目贵志 发表于 2015-8-7 00:12:39
$a是怎么设定的?

藤椅
天斯吾下 学生认证  发表于 2015-8-7 12:35:00
夏目贵志 发表于 2015-8-7 00:50
$a是怎么设定的?
ds
global a r(varlist)

板凳
天斯吾下 学生认证  发表于 2015-8-7 13:28:56
夏目贵志 发表于 2015-8-7 00:50
$a是怎么设定的?
我解决了
  1. foreach v in $a {
  2. if “`v'”[3]=="" {
  3. drop `v'
  4. }
  5. }
复制代码

报纸
蓝色 发表于 2015-8-7 14:35:44
按照你写的,虽然没有报错,但执行也没删除啊


  1. . list

  2.      +---------+
  3.      | x1   x2 |
  4.      |---------|
  5.   1. |  1    1 |
  6.   2. |  2    2 |
  7.   3. |        3 |
  8.   4. |  4       |
  9.   5. |  5    5 |
  10.      +---------+

  11. . ds
  12. x1  x2

  13. . global a r(varlist)

  14. . display $a
  15. x1 x2

  16. .
  17. . foreach v in $a {
  18.   2. if "`v'"[3]=="" {
  19.   3. drop `v'
  20.   4. }
  21.   5. }

  22. .
  23. . list

  24.      +---------+
  25.      | x1   x2 |
  26.      |---------|
  27.   1. |  1    1 |
  28.   2. |  2    2 |
  29.   3. |        3 |
  30.   4. |  4       |
  31.   5. |  5    5 |
  32.      +---------+
复制代码

地板
蓝色 发表于 2015-8-7 14:39:41
你在哪里看的

x[]  这种写法的?

7
天斯吾下 学生认证  发表于 2015-8-7 20:32:08
蓝色 发表于 2015-8-7 14:35
按照你写的,虽然没有报错,但执行也没删除啊
。。。。。。。刚刚才发现不能删除,连老师觉得怎么写代码才能达到我的目的?我试了一下,把变量名字直接放在x的位置是可以删除的,但是用暂元就不行了
  1. if varname[3]=="" {
  2. drop varname
  3. }
复制代码
确切的说是这样定义暂元是不可以的
  1. ds
  2. global a r(varlist)
  3. foreach v in $a {
  4. if “`v'”[3]=="" {
  5. drop `v'
  6. }
  7. }
复制代码
但是用下面的方法定义暂元是可以的,就是把每个变量的名字写出来,但是我想要上面的那个方法,因为我的变量很多
  1. global a “var1 var2 var3”
  2. foreach v in $a {
  3. if “`v'”[3]=="" {
  4. drop `v'
  5. }
  6. }
复制代码
x[]这种写法来自,stata官方论坛http://www.stata.com/statalist/archive/2013-03/msg01237.html

8
蓝色 发表于 2015-8-7 21:16:18
1、我不是连老师

2、你后面写的那个也是无法剔除的

3、你给的那个连接

> forvalues i=2(1)1285{
>         replace var`i'=subinstr(var`i',"(PE)","",.)   in 1
>         if var`i'[1]=="#ERROR" {
>                 drop var`i'
>         }
> }

人家后面都写了error 说明是错误的

9
天斯吾下 学生认证  发表于 2015-8-7 22:24:22
蓝色 发表于 2015-8-7 21:16
1、我不是连老师

2、你后面写的那个也是无法剔除的
1、不好意思,我以为您是连老师

2、我确定是可以的
  1. set obs 100
  2. gen a=""
  3. gen b ="c"
  4. global var "a b"
  5. foreach v in $var{
  6. if `v'[3]==""{
  7. drop `v'
  8. }
  9. }
复制代码
3、他们确实报错invalid syntax,但是x[]的用法是可行的

4、您是否知道有什么办法可以解决我的问题

10
夏目贵志 发表于 2015-8-7 22:53:12
天斯吾下 发表于 2015-8-7 22:24
1、不好意思,我以为您是连老师

2、我确定是可以的3、他们确实报错invalid syntax,但是x[]的用法是可 ...
我始终没看懂问题是什么。你给的那个例子没问题啊。你要是想要不一一写出变量名,就用
foreach v of varlist _all {
至于[]的写法,确实没问题的。我一直都这么用。
  1. . clear

  2. . sysuse auto
  3. (1978 Automobile Data)

  4. . di price[2]
  5. 4749

  6. . di price[3]
  7. 3799

  8. . list price in 2/3

  9.      +-------+
  10.      | price |
  11.      |-------|
  12.   2. | 4,749 |
  13.   3. | 3,799 |
  14.      +-------+
复制代码

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 17:06