问题标签 [stata-macros]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
stata - 如何遍历变量名的一部分?
我需要使用本地宏来遍历 Stata 中变量名的一部分。
这是我试图做的:
Stata 不会识别整个变量名。
如果我在“phth”之后删除下划线,它仍然无法识别宏名称之后的任何内容。
我想避免使用复杂的foreach
循环。
有什么方法可以只使用简单的宏来完成吗?谢谢!
stata - Stata宏读取所有数据
我有以下do
文件:
我有每月的数据,我可以运行这个程序来dta
为每年的每个月创建文件。
但是,我每个月和每年都有几个原始数据。例如,我可以为 2010 年到2012 年的, , , ... 运行此do
文件。我要为每个月获取一个文件,我必须在每次需要时更改它以用于不同的月份。Jan
Feb
March
April
April
dta
我想知道如何通过某种宏来实现这一点?
某种代码在代码周围添加循环,引用与该文件对应的每月文件的do
文件名。
stata - 如何标记扩展宏(本地 :dir )?
我知道我的标题在tokenize
命令被指定为字符串的意义上令人困惑。
我有许多文件夹,其中包含大量、分离、名称错误的 Excel 文件(其中大部分是从 ahe 网站上抓取的)。手动选择不方便,需要依靠Stata扩展宏功能local :dir
来读取。
我的代码如下所示:
这样的代码将生成许多新dta
文件,因此目录中充满了这些文件。我更喜欢为第一个文件创建一个新的数据文件xlsx
,然后append
在foreach
循环内创建其他文件。所以本质上,有一个if-else
内部循环。
我们需要一个filelist
刚刚创建的宏的索引,这样我们就可以编写如下内容:
我知道我的代码效率低下且容易出错:表达式的语法token 'filelist'
也不正确(假设它filelist
不是字符串)。但是,我仍然想弄清楚我的伪代码背后的基本结构。
我怎样才能更正我的代码并使其工作?
另一种更有效的方法受到高度欢迎。
stata - 如何获取子目录的完整列表(包括子目录的子目录)?
我有数千个城市文件夹(例如city1
,city2
等,但实际上命名为NewYork
,Boston
等)。每个文件夹还包含两个子文件夹:land
和house
.
所以目录结构是这样的:
我想获取所有子目录的完整列表并进行一些操作(例如import excel
)。我知道有一个宏扩展函数:local list: dir
来处理这个问题,但它似乎只能返回first tier
子目录,比如city_i
,而不是那些更深的。
更具体地说,如果我想在所有内部文件夹中采取行动,我需要什么样的工作流程?
我已经初步尝试编写代码来实现我的目标:
有问题:
无论如何,在目录中,我努力让它工作但没有成功。
我有另一个关于这个项目的帖子。
补充说明:
正如尼克指出的那样,引起麻烦的是反斜杠。然而,从那一点开始,我遇到了另一个问题。说,没有复杂的动作,我只想测试我的循环是否有效,所以我编写了以下代码片段:
然而,屏幕上的结果是这样的:
似乎代码只在第一个城市上循环了一轮,但未能到达city2
,city3
依此类推。我怀疑这是由于我在当地的写作有问题,尤其是在这一行,但我不确定:
regex - 使用正则表达式或 subinstr() 清理本地宏
我的目标是清除给定的本地_
数字和单词末尾下划线后面的所有数字。假设我只有在单词末尾有下划线和数字。
通过使用subinstr()
,我可以指定要消除_1
(并且可能循环不同的数字),但是对于此类任务,双循环语法似乎过于复杂:
我试图研究regexm()
and regexs()
,但我不太确定如何设置代码。
我知道可能有多种方法可以解决这个问题。
也许有一种更简单的方法来解决我看不到的问题?
stata - 如何自动将最大数量的字符串分配给宏?
我的问题的标题可能有点模棱两可。
以前,我想“获取完整的子目录列表”,然后将这些子目录中的文件读入 Stata(参见这篇文章和这篇文章)。
感谢@Roberto Ferrer 的好建议,我几乎做到了。但那时我遇到了另一个问题。因为我有这么多单独的文件,本地宏的长度似乎达到了上限。命令local n: word count
Stata发送错误消息后:
宏替换导致行太长。
替换宏产生的行将比允许的长。最大允许长度为 645,216 个字符,根据 set maxvar 计算得出。您可以在 Stata/SE 和 Stata/MP 中更改它。以下内容仅在您使用 Stata/SE 或 Stata/MP 时相关。
最大行长度定义为比最大宏长度大 16,目前为 645,200 个字符。set maxvar 每增加一个单位,长度最大值就会增加 129。set maxvar 的最大值为 32,767。因此,如果将 maxvar 设置为其最大值,则最大行长度可能设置为 4,227,159 个字符。
r(920);
当我将子目录的数量减少到 5 个时,Stata 工作正常。由于大约有 100 个子目录,我想复制这些操作 20 次。好吧,它是可以管理的,但我还是想知道我是否可以完全自动化这个过程,更具体地说,“用尽”最大允许的宏长度,导入文件并下次添加另一组子目录。
您可以在下面找到我的代码:
谢谢你。
if-statement - 局部宏的使用
我想从我的原始数据中写入六个临时数据文件,保留以下变量:
- 温度 1:v1-v18
- 温度 2:v1-v5 v19-v31
- 温度 3:v1-v5 v32-v44
- temp4:v1-v5 v45-v57
- temp5:v1-v5 v58-v70
- 温度 6:v1-v5 v71-v84
我尝试了以下方法:
我得到一个invalid syntax
错误。问题在于keep
陈述。具体来说,if
本地宏的条件似乎违反了语法规则。
indexing - 在索引中使用宏循环时出错
我正在尝试创建一个虚拟变量来识别选择截止后的下五个观察值。下面代码中的第一种方法有效,但它看起来有点乱,我希望能够调整我创建假人的观察次数,而无需输入相同的表达式 30 次(通常是我的标志以艰难的方式做某事)。
每次我将宏放入索引时,即
我收到以下错误:
我会非常感谢一些建议。
这有效
这没有。
关于为什么的任何建议?
loops - 生成一个新的宏前缀旧宏的词
定义一个宏try
:
这将生成一个值为 的宏a b c
。
现在我想要一个新的宏try2
来接受 value da db dc
。也就是说,我想为旧宏的每个元素添加相同的前缀,并将其定义为新宏。
loops - Looping over variables with wildcards in local macros
Suppose I have a dataset of variables with the following names (note the stub of x
and hm
):
I want to develop a programmatic way to provide a list of variable names (which may contain wildcards) and then loop through each variable name to recode
all values less than 0 with a missing value (.
).
In practice I have many columns and only want to recode
some of them. I do not want to use column index or ranges because I do not know them, since my data are large.
My approach involves the following steps:
Create a local macro named
/li>myvars
containing the variable names with wildcardsExpand the strings in the variable list to contain the full variable name strings (this should produce the original variable names):
/li>Loop through list of variable names to set values to missing:
/li>
However, I can't figure out how to include the wildcards in the for
loop.
The above code does not work and produces invalid syntax
errors.
I found the following threads on Statalist useful, but they do not provide a solution and the use of stubs does not seem efficient:
Can anyone help me?