gpt4 book ai didi

if-statement - 使用语法的程序中的硬编码和可选 [if] 语句

转载 作者:行者123 更新时间:2023-12-04 04:08:51 25 4
gpt4 key购买 nike

我正在学习如何在编写简单的 Stata 程序时使用可选的 syntax,我想知道是否可以在传递的同时对 if 语句进行硬编码通过 syntax 选项的可选 [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

但这显然行不通(据我所知,因为 syntax 正在解析文本/字符串?)

是否有任何简单的方法可以使用 syntax[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
--------------------------------------------------------------

您的代码的问题不在于 syntax 正在解析文本 [这始终是它的工作],而是两个 if 的组合需要更加小心。你所拥有的会产生类似... if ... if ... 这样的东西,这是非法的。

因此,如果用户提供一个 if 限定符(用户可选,但在句法上不是一个选项)

  1. 您需要获取语法 来去除用户提供的ifhelp syntax 中记录了如何执行此操作。

  2. 然后您需要使用& 来组合两个if 条件。括号可能会有所帮助。

编辑:如果要在用户的if 中使用带引号的字符串,则在程序中使用复合双引号:

if `"`if'"' != "" local if `"& (`if')"'  

一般评论:虽然您想要的是可编程的,但我认为这是不必要且有问题的做法:

  1. 对于分析的审计跟踪,在开头附近带有 keep if 语句的 do-file 和相应的日志文件应该足以作为对数据子集的工作的可重现记录.

  2. 相反,对于审计跟踪,使用代码中内置数据特定约束的高度特化程序很容易被误解或忽视,尤其是对于使用您的工作的其他人,甚至是以后您自己。

  3. 遵循此策略会带来编写大量非常具体的程序的负担,时间和精力的使用不当,对其他人几乎没有用处。

关于if-statement - 使用语法的程序中的硬编码和可选 [if] 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com