楼主: eblog
4438 12

[其他] Stata编程(讨论1) [推广有奖]

  • 0关注
  • 45粉丝

贵宾

情多累美人

已卖:2565份资源

院士

79%

还不是VIP/贵宾

-

威望
8
论坛币
3893966 个
通用积分
735.4915
学术水平
142 点
热心指数
182 点
信用等级
92 点
经验
73666 点
帖子
2284
精华
3
在线时间
1891 小时
注册时间
2006-3-20
最后登录
2025-12-25

楼主
eblog 发表于 2010-1-20 14:58:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
以下程序仅作例示:

program mytest
  version 11
  args l1 l2
  sysuse auto,clear
  replace price=`l1'+`l2'
end

运行之后,输入命令:
mytest 4 5
就把price变量值替换为9

问题:
如何在程序中控制这种情况,比如多输或少输入一个数字,如: “mytest 4 5 6” 、“mytest 4”  会提示错误!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:stata编程 Stata tata replace Version version replace price 程序 如何

回帖推荐

sungmoo 发表于9楼  查看完整内容

*试一下 pr mytest if wordcount("`0'")!=2{ di in red "Too few or many numbers" exit } use auto,clear replace price=`1'+`2' end

arlionn 发表于6楼  查看完整内容

cap program drop mytest program mytest version 11 args l1 l2 if `"`2'"' ==""{ dis as error "You must specify two arguments, not one!" exit } if `"`3'"' !=""{ dis as error "You can not specify more than two arguments" exit } sysuse auto,clear replace price=`l1'+`l2' end

本帖被以下文库推荐

沙发
changbaiqz 发表于 2010-1-20 15:03:07
这个问题很简单啊,不过怎么可能不会这个呢,加一些输出提示就好了啊
男人,生来是为了改变世界的

藤椅
rdjj1234 发表于 2010-1-20 15:06:46
要看是什么语言,如果是C / java都可以控制(可以拿到参数的数量),别的不熟

板凳
eblog 发表于 2010-1-20 15:08:29
changbaiqz 发表于 2010-1-20 15:03
这个问题很简单啊,不过怎么可能不会这个呢,加一些输出提示就好了啊
怎么加!

报纸
JackieZou 发表于 2010-1-20 15:08:36
原理应该是这样的吧:输入的数要存放到数组args中,要检测输入数字是否过多或过少,只需要查看一下数组args存放的数字个数就可以了。

地板
arlionn 在职认证  发表于 2010-1-20 17:25:37
eblog 发表于 2010-1-20 14:58
以下程序仅作例示:

program mytest
  version 11
  args l1 l2
  sysuse auto,clear
  replace price=`l1'+`l2'
end

运行之后,输入命令:
mytest 4 5
就把price变量值替换为9

问题:
如何在程序中控制这种情况,比如多输或少输入一个数字,如: “mytest 4 5 6” 、“mytest 4”  会提示错误!
cap program drop mytest
program mytest
  version 11
  args l1 l2
  if `"`2'"' ==""{
    dis as error "You must specify two arguments, not one!"
    exit
  }
  if `"`3'"' !=""{
    dis as error "You can not specify more than two arguments"
    exit
  }
  sysuse auto,clear
  replace price=`l1'+`l2'
end
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
唐伯小猫 + 1 + 1 + 1 精彩帖子
eblog + 1 + 1 我很赞同

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

7
eblog 发表于 2010-1-20 17:58:43
arlionn 发表于 2010-1-20 17:25
cap program drop mytest
program mytest
  version 11
  args l1 l2
  if `"`2'"' ==""{
    dis as error "You must specify two arguments, not one!"
    exit
  }
  if `"`3'"' !=""{
    dis as error "You can not specify more than two arguments"
    exit
  }
  sysuse auto,clear
  replace price=`l1'+`l2'
end

3ks!

8
eblog 发表于 2010-1-20 18:15:48
我原本是这样解决的,代码如下,供参考:

cap program drop mytest
program mytest
  version 11
  args l1 l2 l3
  while !("`l1'"!="" & "`l2'"!="") {
    dis as error "You must specify two arguments, not one!"
    exit
  }
  while "`l3'"!="" {
    dis as error "You can not specify more than two arguments"
    exit
  }
  sysuse auto,clear
  replace price=`l1'+`l2'
end

9
sungmoo 发表于 2010-1-20 21:09:05
*试一下
pr mytest
  if wordcount("`0'")!=2{
    di in red "Too few or many numbers"
    exit
  }
  use auto,clear
  replace price=`1'+`2'
end
已有 1 人评分学术水平 热心指数 收起 理由
eblog + 1 + 1 好!更简洁了

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

10
arlionn 在职认证  发表于 2010-1-21 16:21:14
sungmoo 发表于 2010-1-20 21:09
*试一下
pr mytest
  if wordcount("`0'")!=2{
    di in red "Too few or many numbers"
    exit
  }
  use auto,clear
  replace price=`1'+`2'
end
这个更为简洁,好!

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

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