楼主: eblog
10547 43

[编程问题求助] Stata编程(讨论4) [推广有奖]

11
arlionn 在职认证  发表于 2010-2-1 11:21:55
没想到几位哥们儿都在,呵呵

12
arlionn 在职认证  发表于 2010-2-1 11:26:29
sungmoo 发表于 2010-2-1 11:11
这里有一个困难在于:若用syntax anything,anything其实也可以包括variable。
这个可以用
local type: type `1'
if "`type'" != "numeric"{
  ……
}
这样的语句控制一下。

我现在倒是感觉 syntax anything 是个非常灵活的语法格式。

13
sungmoo 发表于 2010-2-1 11:28:02
eblog 发表于 2010-2-1 10:56 如果能改成这种格式:ntest 1 8, s(test)  就更好了
*使用了"syntax anything",并约束anything所含的非空格字符只能是0-9,试一下:

cap pr drop mytest
pr mytest
syntax anything [,ns s(str)]

qui{
  clear all
  token `anything'
  if indexnot(subinstr("`*'"," ","",.),"0123456789"){
    n di as error "Only positive numbers can be input"
    exit
  }
  if "`2'"==""|"`3'"!=""{
    n di as error "Two and only two numbers can be input"
    exit
  }
  if `1'>=`2'|`1'<=0{
    n di as error "Second number should > first number > 0"
    exit
  }  
  if "`ns'"!=""&"`s'"!=""{
    n di as error "ns and s should not be input together"
    exit
  }
  local i=`2'-`1'
  set obs `i'
  gen x=`1'*`2'
  if "`ns'"==""{
    if "`s'"!="" save `s',replace
    else save test,replace
  }
}
end

14
sungmoo 发表于 2010-2-1 11:37:54
arlionn 发表于 2010-2-1 11:20 事实上,eblog 所设定的 Nosave 选项不是最佳的选择,若设定成 Save(filename) 会比较符合常规
eblog的默认项是保存。

(这样就要分几种情况。其中之一是:默认保存成何种名字)

15
eblog 发表于 2010-2-1 11:40:25
arlionn 发表于 2010-2-1 11:20
事实上,eblog 所设定的 Nosave 选项不是最佳的选择,若设定成 Save(filename) 会比较符合常规,呵呵。
……
另,sungmoo,虽说把 t1, t2 放到选项中,在写程序时可省略几行,但用的时候稍微麻烦一些。我有点奇怪,为何stata的syntax标准格式中只提供 syntax varlist, syntax namelist 这类的东东,若能提供 syntax numlist 这样的格式我们就不用这么费事了,呵呵。或许是stata考虑到,多数的操作都是以“变量”为基础的吧。
嗯,Nosave确实有点别扭,我把你的程序稍稍改了一下:

cap pr drop mytest
pr mytest
  clear all
  syntax anything[,s(str)]

……略

  if "`s'"!="" {
      save `s',replace
  }
end

Stata没有 syntax numlist 说到说到点子上了,呵呵,我想要的就是这个!

16
eblog 发表于 2010-2-1 11:41:33
sungmoo 发表于 2010-2-1 11:37
arlionn 发表于 2010-2-1 11:20 事实上,eblog 所设定的 Nosave 选项不是最佳的选择,若设定成 Save(filename) 会比较符合常规
eblog的默认项是保存。

(这样就要分几种情况。其中之一是:默认保存成何种名字)
嗯,我之前的考虑欠妥,默认项不保存更符合常规些

17
jzhyue 发表于 2010-2-1 11:43:46
arlionn 发表于 2010-2-1 11:20
事实上,eblog 所设定的 Nosave 选项不是最佳的选择,若设定成 Save(filename) 会比较符合常规,呵呵。

另,sungmoo,虽说把 t1, t2 放到选项中,在写程序时可省略几行,但用的时候稍微麻烦一些。我有点奇怪,为何stata的syntax标准格式中只提供 syntax varlist, syntax namelist 这类的东东,若能提供 syntax numlist 这样的格式我们就不用这么费事了,呵呵。或许是stata考虑到,多数的操作都是以“变量”为基础的吧。
同意连老师的观点: Save(filename) 体现了01编程思路。
感觉有时候syntax varlist,选项  的格式更规范,容易对数据分类和定位,尤其是对某些指示变量放在选项中更具有结构性。
不知对否?

18
eblog 发表于 2010-2-1 11:46:22
arlionn 发表于 2010-2-1 11:26

我现在倒是感觉 syntax anything 是个非常灵活的语法格式。
似乎 syntax anything 已经包含 syntax numlist ?

19
eblog 发表于 2010-2-1 11:50:40
arlionn 发表于 2010-2-1 11:21
没想到几位哥们儿都在,呵呵


20
sungmoo 发表于 2010-2-1 11:51:31
eblog 发表于 2010-2-1 11:46 似乎 syntax anything 已经包含 syntax numlist ?
syntax numlist是不合法的。

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-28 15:50