Stata 将动态创建的变量制成表格

Stata 将动态创建的变量制成表格,stata,Stata,我经常想把两个变量的乘积制成表格。例如,假设我有x1和x2,它们都是整数值。在R中,表(x1*x2)执行我想要的操作。我不需要创建新变量(例如,x3)来获取所需的信息 我想在斯塔塔也这样做。也就是说,我想运行一个命令,比如tablatex1*x2。(我需要一直做这类事情,这也是我不想首先创建一个新变量的原因之一)在Stata中有没有办法做到这一点?我认为如果不进行一些编程工作,就无法获得这种行为。请注意,tablate需要varnames或varlist,并且不允许使用表达式。请参见帮助列表。当

我经常想把两个变量的乘积制成表格。例如,假设我有
x1
x2
,它们都是整数值。在R中,
表(x1*x2)
执行我想要的操作。我不需要创建新变量(例如,
x3
)来获取所需的信息


我想在斯塔塔也这样做。也就是说,我想运行一个命令,比如
tablatex1*x2
。(我需要一直做这类事情,这也是我不想首先创建一个新变量的原因之一)在Stata中有没有办法做到这一点?

我认为如果不进行一些编程工作,就无法获得这种行为。请注意,
tablate
需要varnames或varlist,并且不允许使用表达式。请参见帮助列表。当然,
generate
是一个允许表达式的命令。有关详细信息,请参阅
帮助exp

我记得在Statalist中有一个关于“动态计算”的讨论,但我现在找不到它;你可能想检查一下。如果我没记错的话,这对于因子变量以外的事物是不可能的,您可以使用“动态”因子变量表示法(
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
以及一些使用新定义的命令tablete2的代码:

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
不太完美,但我希望你能理解


另请参见
帮助程序
和其中的参考资料

我认为罗伯托是对的。为了在Stata中将产品制成表格,您必须首先计算该产品。除了将计算结果隐藏在程序中之外,没有其他方法可以解决这个问题。由于您希望重复执行,该程序应该很有用。非常感谢@NickCox。我已经采纳了您的建议,将变量标签添加到
程序中
,以消除难看的临时变量名。具体来说:
label var`prod''1'x`2'
@RobertoFerrer:感谢您提供了一个非常有用的解决方案。这就是我要用的。