If statement 程序中使用语法的硬编码和可选[if]语句
我正在学习如何在编写简单的Stata程序时使用可选的If statement 程序中使用语法的硬编码和可选[if]语句,if-statement,syntax,stata,If Statement,Syntax,Stata,我正在学习如何在编写简单的Stata程序时使用可选的语法,我想知道是否可以在通过语法选项传递可选的[if]语句的同时对if语句进行硬编码 我知道一个简单的函数可以写成: sysuse auto program meanprice syntax [if] mean price `if' end 然后我可以使用一些可选的if语句,比如: meanprice if price > 6000 & rep78 > 2 但是,假设我想硬编码price>6000语
语法
,我想知道是否可以在通过语法
选项传递可选的[if]
语句的同时对if
语句进行硬编码
我知道一个简单的函数可以写成:
sysuse auto
program meanprice
syntax [if]
mean price `if'
end
然后我可以使用一些可选的if
语句,比如:
meanprice if price > 6000 & rep78 > 2
但是,假设我想硬编码price>6000
语句,并且仍然能够选择可选的if
语句。我之所以要这样做,是因为我想要硬编码的部分非常严格,我总是希望通过我正在编写的一些嵌套程序传递这些选项,而不必每次都指定它们
我试过使用,例如
program meanprice_test
syntax [if]
mean price if price > 6000 `if'
end
但这显然不起作用(据我理解,因为语法正在解析文本/字符串?)
使用语法
和[if]
是否有任何简单的方法来实现所需的结果?我可以想到一些我宁愿避免的非常繁琐的解决方法。您在Stata术语中定义的是命令,而不是函数
“显然不起作用”应始终通过给出错误消息或其他表明问题的明确结果来解释
撇开这一点,考虑一下:
program meanprice_test
syntax [if/]
if "`if'" != "" local if "& (`if')"
mean price if price > 6000 `if'
end
. sysuse auto
(1978 Automobile Data)
. meanprice_test if foreign
Mean estimation Number of obs = 9
--------------------------------------------------------------
| Mean Std. Err. [95% Conf. Interval]
-------------+------------------------------------------------
price | 8783.667 827.6595 6875.08 10692.25
--------------------------------------------------------------
. meanprice_test
Mean estimation Number of obs = 23
--------------------------------------------------------------
| Mean Std. Err. [95% Conf. Interval]
-------------+------------------------------------------------
price | 9655.696 635.944 8336.829 10974.56
--------------------------------------------------------------
代码的问题不在于语法
解析文本[这始终是它的工作],而是两个if
的组合需要更多的注意。你所拥有的会产生像<代码>如果
<代码>如果
。。。这是违法的
因此,如果用户提供一个if
限定符(用户可选,但语法上不是选项)
语法
,以去除用户提供的。如何执行此操作,请参见帮助语法
和组合这两个if
条件。插入括号可能会有所帮助
If
中使用带引号的字符串,则在程序中使用复合双引号:
if `"`if'"' != "" local if `"& (`if')"'
一般评论:虽然您想要的是可编程的,但我认为这是不必要的,值得怀疑的做法:
keep if
语句的do文件和相应的日志文件应足以作为数据子集工作的可复制记录虽然我把这当作一个编程问题来解决,但我越想它,它就越是一个糟糕的编程策略。有关更多信息,请参见下面的一般性评论。