首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Stata中的简单函数

Stata中的简单函数
EN

Stack Overflow用户
提问于 2013-08-06 16:24:02
回答 1查看 489关注 0票数 0

编辑:谢谢乔的建议,我会把我的问题说得更具体。实际上,我需要在Stata中编写一个函数,其中变量A,B,C,D,.作为输入,变量Y作为输出,可以用通常的Stata函数/命令来计算,例如"generate dummy=2*myfun(X) if .“

函数本身包含数值计算。伪Stata代码看起来像

代码语言:javascript
运行
复制
myfun(X)
 gen Y=0.5*X if X==1
 replace Y=31-X if X==2
 replace Y=X-2 if X==3
 .... a long list
return(Y) 

请注意,X可以是一组不同的Stata变量,数值计算在函数中是相当长的。这就是为什么我想用一个函数。我猜Stata中的本机"program“命令不适合这种类型的问题,因为它不能将变量作为输入/输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-06 17:42:03

(回答原问题)

我从来没有用过SAS,但我突然猜到你想要的东西

代码语言:javascript
运行
复制
foreach v in A B C D { 
    gen test`v' = 0.5 * (`v' == 1) + 0.6 * (`v' == 2) + 0.7 * (`v' == 3)  
}

代码语言:javascript
运行
复制
foreach v in A B C D { 
    gen test`v' = cond(`v' == 1, 0.5, cond(`v' == 2, 0.6, cond(`v' == 3, 0.7, .))) 
}

但是请稍等,中间线看起来就像

代码语言:javascript
运行
复制
    gen test`v' = (4 + `v') / 10 

(回答完全不同的修订问题)

这可以通过各种方式进行。如前所述,您可以有一个循环。

代码语言:javascript
运行
复制
  foreach v in A B C D { 
      gen test`v' = 0.5 * `v' if `v' == 1 
      replace test`v' = 31 - `v' if `v' == 2 
      replace test`v' = `v' - 2 if `v' == 3 
  }   

问题是“我猜Stata中的本机”程序“命令不适合这种类型的问题,因为它不能将变量作为输入/输出。”这种猜测是完全错误的。你也可以写一个程序来做这件事。这个例子是示意图的,不是确定的。一个真正的程序将包括更多的检查和错误信息,以匹配任何不正确的输入。要获得详细的建议,您确实需要阅读文档。一个答案,所以不能教你所有你需要知道的,即使是编写简单的Stata程序。无论如何,这个例子显然是琐碎的和/或不完整的,所以一个完整的工作例子是没有意义的或不可能的。

代码语言:javascript
运行
复制
   program myweirdexample 
       version 13 
       syntax varlist(numeric), Generate(namelist) 

       local nold : word count `varlist'
       local nnew : word count `generate' 
       if `nold' != `nnew' { 
            di as err "`generate' does not match `varlist'" 
            exit 198 
       }

       local i = 1 
       quietly foreach v of local varlist { 
            local new : word `i' of `generate' 
            gen `new' = 0.5 * `v' if `v' == 1 
            replace `new' = 31 - `v' if `v' == 2 
            replace `new' = `v' - 2 if `v' == 3             
            local ++i 
       }
   end 

关于术语的脚注:该问题使用功能一词比在Stata中使用的更为广泛。在Stata中,命令和函数是不同的;“函数”不是命令的同义词。

第二个脚注:查看recode。这可能是您需要的,但它是最好的映射整数代码到其他整数代码。

第三个脚注:需要检查的一个例子是,generate()的参数应该是合法和新的变量名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18085516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档