我经常想列表两个变量的乘积。例如,假设我有x1
和x2
,它们都是整数值。在R,table(x1 * x2)
做我想要的。我不需要创建一个新变量(例如,)来获取我需要的信息。动态创建的变量列表
我想在Stata中做同样的事情。也就是说,我想运行一个像tabulate x1*x2
这样的命令。 (我需要始终做这种事情,这是我不首先想创建一个新变量的原因之一。)有没有办法在Stata中做到这一点?
我经常想列表两个变量的乘积。例如,假设我有x1
和x2
,它们都是整数值。在R,table(x1 * x2)
做我想要的。我不需要创建一个新变量(例如,)来获取我需要的信息。动态创建的变量列表
我想在Stata中做同样的事情。也就是说,我想运行一个像tabulate x1*x2
这样的命令。 (我需要始终做这种事情,这是我不首先想创建一个新变量的原因之一。)有没有办法在Stata中做到这一点?
我不认为没有一些编程工作就可以得到这种行为。请注意,tabulate
要求varnames或varlist和表达式是不允许的。见help tabulate
。自然,generate
是一个允许表达式的命令。有关详细信息,请参阅help exp
。我回想一下在Statalist中的“即时计算”的讨论,但我现在无法找到它;您可能需要检查archives。如果我没有记错,除了因子变量以外的其他因素,您可以使用因子变量记号(help factor variables
)“即时”使用。我记得有很好的理由说明为什么会出现这种情况。
但是对于像两个变量的乘积这样的东西,您可以在.ado文件中编写一个简单的程序,将其保存在Stata系统目录中(最好是〜/ ado/personal /),然后随时使用它。
下面是一个例子的程序:
program define tabulate2, byable(recall)
/*
Tabulate the product of two variables.
Modeled after the official -tab1- command.
*/
version 12
syntax varlist(min=2 max=2 numeric) [if] [in] [, *]
tokenize `varlist'
tempvar prod
gen `prod' = `1' * `2'
label var `prod' "`1' x `2'"
tempvar touse
mark `touse' `if' `in'
capture noisily tabulate `prod' if `touse', `options'
end
而一些代码,使新定义的命令tabulate2
的用途:
clear all
set more off
input ///
var1 var2
1 2
3 4
3 4
3 4
5 6
end
list
tabulate2 var1 var2
输出:
. tabulate2 var1 var2
var1 x var2 | Freq. Percent Cum.
------------+-----------------------------------
2 | 1 20.00 20.00
12 | 3 60.00 80.00
30 | 1 20.00 100.00
------------+-----------------------------------
Total | 5 100.00
并不完美,但我希望你明白。
另请参阅help program
及其中的参考文献。
我认为罗伯托是正确的。为了在Stata中列表产品,您必须首先计算该产品。除了将计算隐藏在程序中之外,没有办法。如果您想重复执行此操作,该程序应该很有用。 –
非常感谢@NickCox。为了摆脱丑陋的临时变量名称,我已经将你的变量标签添加到'program'的建议中。具体来说:''var''''''''''1''''''' –
@RobertoFerrer:谢谢你提供了一个非常有用的解决方案。这是我将要使用的。 – user697473