假设我有一个全局宏x,如何提取其中的项目数(以空格分隔的未加引号的单词)?
global x abc xyz foo
Run Code Online (Sandbox Code Playgroud)
我确信这是一项简单的任务,但我已经查看过,help macro到目前为止还没有找到任何东西。
可以在R中使用宏吗?
我确实看了一个类似于这个的问题,但是不能理解它.
假设我想创建标量,每个标量都有不同的名称和内容.基本上,我想在R中运行的内容可以通过以下虚拟示例来说明:
local i=1
forvalues i=1/5 {
scalar scalar_`i'=`i'+1
}
Run Code Online (Sandbox Code Playgroud)
在Stata,如i取不同的值,scalar1,scalar2,scalar3等等产生的.我没有必要i=1/5在运行循环时输入整个列表(只是).
这可以在R中完成吗?
我有一个名为的本地宏peer_list,它包含280个不同的元素,所有元素都是字符串.我还有另一个本地宏调用used_list,它包含本地包含的元素的子集peer_list.
对于peer_list我想要测试该元素是否在本地的每个元素used_list.如果元素存在于used_list我想丢弃它,否则我想执行另一组条件.
我试图使用以下代码,但它没有工作:
foreach peer in local peer_list {
if `:list peer in local used_list' {
* commands I wish to execute
}
else {
* commands I wish to execute
}
}
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何关于实现这一目标的替代方法的建议.
我有各种Stata数据文件。这些位于不同的文件夹中。我还有一个do使用这些文件的文件,一次使用一个。
有没有一种方法可以使用宏来引用do文件中的特定数据集?
例如:
local datafile = "C:\filepath\mydata.dta"
Run Code Online (Sandbox Code Playgroud)
想法是稍后在代码中使用它,如下所示:
use `datafile', clear
Run Code Online (Sandbox Code Playgroud)
将宏定义为全局变量是可行的。但是我不想使其全局化,因此也不能阻止我一次运行两个单独的程序。
全局定义(不带dta扩展名)为:
global datafile = "C:\filepath\mydata"
Run Code Online (Sandbox Code Playgroud)
用作:
use "$datafile", clear
Run Code Online (Sandbox Code Playgroud)
编辑:
我的文件路径中有空格C:\A and B report\mydata.dta。结果,使用上面的本地定义,我得到以下错误:
无效的文件规范
考虑下面的代码片段:
local date: display %td_CCYY_NN_DD date(c(current_date), "DMY")
local date_string = subinstr(trim("`date'"), " " , "", .)
save "`date_string'_example", replace
mkdir "`date_string'_example"
Run Code Online (Sandbox Code Playgroud)
这将创建如下输出:
20170521_example.dta
Run Code Online (Sandbox Code Playgroud)
但是,我想创建一个文件名,它也要有时间,而不仅仅是日期。如果时间是下午4点25分01秒,那么我希望具备以下条件:
20170521_162601_example.dta
Run Code Online (Sandbox Code Playgroud)
如何添加此元素?
我尝试将函数放入c(current_time)其中,date()但这没有用。
此外,我试图分配本地宏savedir使用date_string。但是,似乎Stata在后面跟随时无法识别它\:
local date: display %td_CCYY_NN_DD date(c(current_date), "DMY")
local date_string = subinstr(trim("`date'"), " " , "", .)
local savedir "C:\Users\`date_string'_output"
cd "`savedir'
Run Code Online (Sandbox Code Playgroud)
如何保存本地宏savedir?
我正在 Stata 中编写一些代码,并且我已经使用过preserve一次。然而,现在我想preserve再次,不使用restore.
我知道这会给出错误消息,但是它会保存到新的保护区吗?
在 Stata 中进行回归后,我试图仅绘制交互项的系数。
我无法使用社区贡献的命令来做到这一点coefplot。
这是一个可重现的示例和我尝试的解决方案:
sysuse auto, clear
reg price foreign i.turn foreign#i.turn
*this plots all coefficients:
coefplot,
*this drops _cons and foreign but not i.turn
coefplot, drop(i.turn _cons foreign )
*variations with keep also do not work
coefplot, keep(foreign#i.turn )
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做到这一点?
我已经在Statalist上交叉发布了这个问题。
我在使用do带有本地宏的文件时在Stata中收到以下错误:
clear
capture log close
sysuse auto,clear
log using stata,text replace
local varlist price mpg rep78 weight length
reg 'varlist'
local close
Run Code Online (Sandbox Code Playgroud)
产量
local varlist price mpg rep78 weight length
reg 'varlist'
invalid name
Run Code Online (Sandbox Code Playgroud)
我知道这是一个非常微不足道的问题,但我不确定这个错误来自何处.
请注意,当我使用全局宏时,我没有收到错误.
我试图forvalues在Stata版本11.2 的循环中标记变量.
但是,我无法使用扩展字符串函数word # of string习惯用法:
local names `""Growth" "Mature" "All""'
forvalues i = 0/2 {
local name : word `i' of `names'
display "`name'"
}
Run Code Online (Sandbox Code Playgroud)
这遵循Statalist解决方案,但我不断收到invalid syntax错误.
我也尝试过local names Growth Mature All,但这也不起作用.
有没有办法在算法上做到这一点?
我想为我的数据集的子集创建一个本地宏,以用于将来的回归(请参阅循环外的宏的一些用途部分).
我开始使用以下代码:
quietly reg y x1 x2 x3
local subset if e(sample)
list Unit `subset'
reg y x1 x2 if `subset'
Run Code Online (Sandbox Code Playgroud)
x3缺少值,因此在第一个reg命令中排除了一些观察值.list命令的输出确实表明宏的内容确实是我想要的(Unit是一个标识观察的变量).
不过,我在最后一个命令后收到一条错误消息:
if not found
r(111);
Run Code Online (Sandbox Code Playgroud)
从以下信息r(111):
__________ 未找到;
没有变量定义;
该变量不存在.您可能输错了变量的名称.
我的语法有什么问题?也就是说,为什么Stata if作为变量处理?
我有一个Stata程序,它输出一个空格分隔的变量名称的局部标量.
我有两个样品(两次一样运行程序dta)和工会(路口-出现在这两个标量变量名)存储为一个新的空间分隔的局部标(用于输入到另一个程序).
我无法弄清楚如何分割(每个空格)和/或测试每个变量名称的出现.
我正在尝试编写一个命令,该命令返回一个四舍五入到小数点后两位的百分比标量。百分比可以为负数或正数,小数点前的位数未知。
这是 MRE,显示了我遇到的问题。
#delimit;
capture program drop my_note;
program my_note, eclass;
local my_x: display %-9.2f 92.23999999999999;
ereturn scalar my_x = `my_x';
end;
ereturn clear;
my_note;
ereturn list;
display %-9.2f 92.23999999999999;
display 92.23999999999999;
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么 display 似乎做了正确的事情(将 92.23999999999999 转换为 92.24,尽管无论格式如何),但 e(my_x) 似乎没有继承该格式。
我对distinctStata中的命令有一个简单的问题.
当使用by前缀时,它是否可以返回一维矩阵r(N)?
例如:
sysuse auto,clear
bysort foreign: distinct rep78
Run Code Online (Sandbox Code Playgroud)
我可以存储[2,1]矩阵,每行代表不同值的数量rep78吗?
该手册似乎表明它只存储最后一个值的不同值的数量.