问题标签 [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.

0 投票
1 回答
1196 浏览

foreach - 使用本地宏时出现无效的“`”错误

我正在按照此链接中有关如何通过foreach循环附加 Stata 文件的说明进行操作。我认为这很简单。

但是,当我尝试在循环中引用每个in 时f,我收到错误:datafilesforeach

我已经设置了我的工作目录,并且数据位于一个名为csvfiles. 我正在尝试使用本地宏调用子文件夹f中的每个文件,然后将每个文件附加到名为.csvfilesdatafilesdata.dta

我在do下面的文件中包含了代码:

0 投票
1 回答
306 浏览

max - 从宏中查找特定列列表的最大值

我已经声明了一个本地宏,它对应于我的 Stata 项目中的几个变量名:

我希望能够使用宏中的所有变量生成一个新变量letters

但是,这不起作用,并导致以下错误消息:

这是因为max()要求输入用逗号分隔,例如:

我有什么办法可以操纵宏letters吗?

或者使用除 之外的函数max(),这样我就可以在变量列表中找到最大值而无需手动将它们输入max()函数?

0 投票
2 回答
316 浏览

stata - 读取新文件后宏丢失

使用 Stata,我将本地宏 ( macro_name) 定义为一个数据文件中的变量 ( macro_variable)。

读入一个新文件(在同一个do文件中)后,我不再能够引用该宏。

相反,我收到错误:

我正在学习如何使用宏,所以请多多包涵。但是,即使我加载新的数据集,我是否也不能display在单个文件中调用或调用该宏?do

例如:

无论我将宏定义为全局还是本地,都会出现此问题。此外,我试图通过创建一个单独的locals.do文件来解决这个问题,该文件包含在我的主do文件的序言中:

但是,我仍然收到上面列出的错误。

宏(本地或全局)在读入新文件后会立即消失吗?根据我所阅读的内容,这似乎不正确。

提前感谢您的任何澄清。

0 投票
1 回答
874 浏览

for-loop - 按索引引用宏值

我将下面的宏定义为变量的级别idvar1并且var2

我希望能够在foreachforval循环期间通过它们的索引来引用存储在这些宏中的级别值。我正在学习如何使用宏,所以我不确定这是否可行。

当我尝试访问上述任何宏的单个元素时,会显示宏的每个元素。例如,如果我display是 的第一个元素id_lev,则每个元素都显示为单个元素(并且最后一个元素被列为我不理解的无效名称):

此外,如果我尝试在循环中引用任何宏的元素(下面给出了我尝试过的示例),我会收到错误,即级别列表的第三个值是无效数字。

不能通过索引来引用宏的元素吗?

还是我错误地引用了索引值?


更新1:

我已经完成了所有工作(谢谢),除了调整forvalWilliam 对我上面的循环的回答中给出的循环,我试图在相同的索引值处访问两个变量的宏。

具体来说,我想同时调用第一个、第二个、...、最后一个元素,var1以便var2我可以使用循环中的元素来生成一个新变量。我怎样才能调整forval威廉建议的循环来完成这个?


更新 2:

我能够修改下面 William 给出的代码来创建功能循环:

0 投票
1 回答
1142 浏览

variables - 如何使用引用变量的本地宏?

我正在尝试在 Stata 中创建一个宏,它将设置一个变量名供我稍后在我的do文件中引用。本质上,我试图用本地宏替换变量名。

示例数据集如下:

我的数据有许多指标,但我一次只需要使用一个指标。我想将我当前正在使用的指标放入一个宏中,这样我只需在整个代码中更改一件事。

我的代码是:

我想要的是能够使用这样的东西:

但是,我不断收到一个错误,"type mismatch"即使myvar已定义。

0 投票
1 回答
366 浏览

dataset - 如何使用宏引用数据文件?

我有各种 Stata 数据文件。它们位于不同的文件夹中。我也有一个do使用这些文件的文件,一次一个。

有没有办法使用宏来引用我do文件中的特定数据集?

例如:

这个想法是稍后在代码中使用它,如下所示:

将宏定义为全局变量是可行的。但我不想让它全球化,所以它不会阻止我一次运行两个单独的程序。

全局定义(不带dta扩展名)是:

这用作:


编辑:

我的文件路径有空格,如C:\A and B report\mydata.dta. 结果,使用上面的本地定义,我得到以下错误:

无效的文件规范

0 投票
1 回答
60 浏览

loops - 循环输出保存因子变量的水平

我正在处理一个大型数据集(1800 万个观测值)。

我有一个X特别需要分析的连续变量,它是一个具有大约 6k 水平的因子变量。我需要帮助创建一个循环函数,该函数对于因子变量的每个级别,将为我提供 的平均值和标准差X,保存平均值和标准差,然后进入下一个因子级别并重复。

我认为循环将解决这个问题,因为我需要对大约 6,000 个因子水平重复此过程。我特别想知道如何告诉 Stata 一旦完成前一个因子级别就进入下一个因子级别,并保存平均值和标准差,而不会覆盖前一个因子级别的这些统计数据。

理想情况下,我可以将因子的每个级别的输出保存到 Excel 工作表中,每一行代表一个因子级别,三列:A将是因子级别,B将是平均值,C将是标准差。

0 投票
1 回答
63 浏览

datetime - 年月日转换

Q1 1996我有一个宽格式的数据集,其中包含从到的事件的季度计数Q4 2016

每个季度的变量名称如下:

  • Q1 =yyyy0101_yyyy0401
  • Q2 =yyyy0401_yyyy0701
  • Q3 =yyyy0701_yyyy1001
  • Q4 =yyyy1001_yyyy0101

我有一个宏可以像这样转换它们:

然后我count按年份将数据折叠成一个长格式的单个变量:

现在我想做同样的事情,但每季度一次。

执行完全相同的过程但按年逐季捕获计数总和的宏是什么?如果我想做半年怎么办?

0 投票
1 回答
101 浏览

foreach - SPSS是否具有类似于Stata中的双引号/复合引号的功能?

举个例子,当我们有一系列 10 个分类变量var1, var2,..., var10,它们的值从 1 到 5。

我们从这些变量中的每一个创建 5 个虚拟变量。例如,从var1我们生成dumvar1_1,..., dumvar1_5. 如果原始变量具有与假人顺序对应的值,则假人将收到值 1。也就是说,dumvar1_1 = 1 if var1 = 1; dumvar1_1 = 0否则。同样,dumvar1_2 = 1 if var1 = 2; dumvar1_2 = 0否则。其他假人也一样。

如果我在 Stata 中这样做,我会这样做:

有没有办法在 SPSS 中做同样的事情?

0 投票
1 回答
1022 浏览

loops - 在Stata中附加本地宏

在 Stata 中,我想探索具有不同因变量和自变量的多种组合的回归。

为此,我决定使用一个循环来执行所有这些回归,然后以简洁方便的形式将相关结果(系数、R2 等)保存在矩阵中。

对于这个矩阵,我想命名行和列以使阅读更容易。

到目前为止,这是我的代码:

它将给出一个如下所示的矩阵 A:

显然,有些事情还没有完成。矩阵的行名应该是“price, price, mpg, mpg”,因为这就是四个回归中的因变量。

在上面的代码中,考虑现在注释掉的行

它被注释掉是因为在当前的形式中,它给出了一个错误。

我希望rownms在每次迭代时都在本地宏中附加变量的标签(或名称),生成Price Price Mileage (MPG) Mileage (MPG).

但我似乎无法正确使用引号将宏附加到当前变量的标签。