我正在寻找一种方法来检查 Stata 数据集中是否存在变量,如果不存在,则在循环中重复检查变量名称,直到找到存在的变量为止。我知道对类似问题的其他答复涉及confirm并依赖于测试 的价值_rc。
但是,如果您尝试重复使用这些方法,则循环的任何给定迭代中的值_rc只能说明在任何先前的迭代中是否至少存在一个错误。我希望继续测试,直到没有错误为止,但是每当第一次尝试导致错误时,就无法判断第二次尝试是否也会导致错误,因为_rc无论如何都保持不变(假设所有错误报告相同的代码) 。有没有办法手动重置_rc为零,或者以不涉及的不太特别的方式测试变量的存在_rc?
我正在使用 do 文件生成多个变量的图表,我希望能够检索变量标签(以便我可以将其用作图表标题)。
在我的梦里,有类似这样的事情:
sysuse auto, replace
local pricelabel = varlab(price)
display "Label for price variable is `pricelabel'"
Run Code Online (Sandbox Code Playgroud)
这将(在我的梦想中)产生:
Label for price variable is Price
Run Code Online (Sandbox Code Playgroud)
我查看了描述、总结以及标签部分的文档,但似乎找不到解决方案。
我的数据如下所示:
(sassign是保存数据的data.frame)
head(sassign %>% select(child,youth,cook,do_it))
child youth cook do_it
1 3 2 2 0
2 0 1 0 1
3 0 0 2 0
4 0 0 0 0
5 0 0 1 0
6 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
我的目标是找到购买儿童书籍、青少年书籍、烹饪书籍和动手书籍的总人数。
所以,这就是我所做的:
sassign %>% summarise( sumchild=sum(child),sumyouth=sum(youth),sumcook=sum(cook),sumdo_it=sum(do_it))
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
sumchild sumyouth sumcook sumdo_it
1 42723 19549 46830 23153
Run Code Online (Sandbox Code Playgroud)
问题 1:: 这解决了我的目的,但是我是否可以获得按列排序的输出?这是我从 Stata 得到的:
--------------------------------------------------------------
| Total Std. Err. [95% Conf. Interval]
-------------+------------------------------------------------
cook | 46830 265.0706 46310.46 47349.54
child | 42723 250.4739 42232.07 …Run Code Online (Sandbox Code Playgroud) 我在 Stata 中运行以下命令:
eststo: ivregress 2sls y (x=z) control [aw=weight], cluster(cluster) first
esttab using file.tex, b(%9.3f) se(%9.3f) r2(%9.8f) replace
Run Code Online (Sandbox Code Playgroud)
这会生成第二阶段的发布式表格。但是,第一阶段我应该做什么呢?我需要系数和 R^2。
我可以使用任何命令进行发布式输出 - 它不需要是esttab.
我尝试过ivregress2,但没有成功:
_iv_vce_wrk(): 3001 expected 21 arguments but received 20
<istmt>: - function returned error
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码:
estpost summarize gdpgrowth, listwise
esttab, cells("mean sd min max") nomtitle number
Run Code Online (Sandbox Code Playgroud)
gdpgrowth这个想法是使用创建变量的汇总统计表esttab。
我得到这个输出:
(1)我喜欢这方面的一切,除了我想从平均名称中删除 the ,sd转为standard deviation,min转为minimum和max转入maximum。
我还想将每个数字四舍五入到小数点后第二位并更改N为sample size.
我正在尝试编写一个命令,该命令返回一个四舍五入到小数点后两位的百分比标量。百分比可以为负数或正数,小数点前的位数未知。
这是 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) 似乎没有继承该格式。
我正在尝试foreach在Stata中编写一个循环,它将自动生成数据集中所有连续变量的日志转换(排除字符串,二进制变量).我试过的代码似乎不起作用如下:
qui foreach v of varlist _all {
gen 'v' = log(v)
}
Run Code Online (Sandbox Code Playgroud)
另外,我想编写一个循环,它将生成所有可能的交互项排列,但我不知道如何处理这个问题.
我有一个带有3个标识符(日期,公司和人)的不平衡面板,我想price为每个公司和日期计算过去90天内变量()的滚动平均值.当我分配面板时,tsset我收到一条错误消息repeated time values within panel.由于我的小组中的每个人都属于几家公司,因此我每个日期都有几个公司 - 人员对.到目前为止,这是我的代码:
tsset company_id date_id
tsegen Mean_90days = rowmean(L(0/90).price)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以进行这样的计算吗?
我的解决方案是生成一个company_person_id使用group(company_id person_id),计算每个company_person_id date观察的平均值并使用均值egen=mean()进行聚合by (company_id date_id).但是我仍然不确定它是否合情合理.
我做了以下
import delimited using "input.txt", delimiters("\t")
Run Code Online (Sandbox Code Playgroud)
但是input.txt没有标题.
我可以看到数据的第一行只是一个标题.
数字变为标题,如v1,v2 ..,字符变为标题,如a,y,..
如果数据看起来像
2014 11 A 03
2014 11 B 06
Run Code Online (Sandbox Code Playgroud)
然后在Stata中加载的数据是
header: v1 v2 a v4
1st row: 2014 11 B 06
Run Code Online (Sandbox Code Playgroud)
如何在不省略input.txt第一行的情况下添加一个"v1,v2,v3 .."的任意标题,我该怎么办?
stata ×10
label ×2
statistics ×2
dplyr ×1
editor ×1
loops ×1
mean ×1
r ×1
regression ×1
sorting ×1
stata-macros ×1
summary ×1
variables ×1