关于stata调用子程序的问题-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

Stata软件培训

>>

关于stata调用子程序的问题

关于stata调用子程序的问题

发布:wyy19860530 | 分类:Stata软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

我现在在做一个生成关于美国50个州的minimumwage(有若干种minimumwage,即有很多变量,他们的分布的规律基本一致,即在某一个时间段,例如1970年3月到1973年2月,是一个常数值,在另一个时间段上,是另一个常数值, ...
免费学术公开课,扫码加入


我现在在做一个生成关于美国50个州的minimum wage(有若干种minimum wage,即有很多变量,他们的分布的规律基本一致,即在某一个时间段,例如1970年3月到1973年2月,是一个常数值,在另一个时间段上,是另一个常数值,like step function)的stata程序,我已经有一个原始stata程序,非常大,有很多类似的或者重复的语句,希望把它简化并且整理,我的想法是先打算做出2,3个州的子程序,然后再把后面的州的按一个州对应一个子程序的方法加进去,最后做主程序,一一执行这些子程序,不知道这样的思路是否可行,例如我的AK州的子程序如下:
replace dsources = 1 if st_name == "ak"
ds_gnrl = 1 for ak if from ``www.dol.gov/esa/whd/state/stateMinWageHis.htm
saved as ``stateMinWageHis.htm"
ds_gnrl = 2 for ak if from Monthly Labor Review Online
ds_gnrl = 3 for ak if from www.labor.state.ak.us/lss/whact.htm
saved as Alaska.htm
replace ds_gnrl = 1 ///
if ( st_name == "ak" & ( year == 1970 | year == 1972 | year == 1976 | year == 1979 ) )
replace ds_gnrl = 2 ///
if ( st_name == "ak" & ( year >= 1980 & year <= 2002 ) )
replace ds_gnrl = 3 ///
if ( st_name == "ak" & ( year >= 2003 & year <= 2009 ) )
replace mw_gnrl = 2.1 ///
if ( st_name == "ak" & ( year == 1970 | year == 1972 ) )
replace mw_gnrl = 2.8 ///
if ( st_name == "ak" & year == 1976 )
replace mw_gnrl = 3.4 ///
if ( st_name == "ak" & year == 1979 )
replace mw_gnrl = 3.6 ///
if ( st_name == "ak" & year == 1980 )
replace mw_gnrl = 3.85 ///
if ( st_name == "ak" & ( year >= 1981 & year <= 1989 ) ) & ///
if ( st_name == "ak" & ( year == 1990 & month <= 3 ) )
replace mw_gnrl = 4.3 ///
if ( st_name == "ak" & ( year == 1990 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year == 1991 & month <= 3 ) )
replace mw_gnrl = 4.75 ///
if ( st_name == "ak" & ( year == 1991 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year >= 1992 & year <= 1995 ) ) & ///
if ( st_name == "ak" & ( year == 1996 & month <= 9 ) )
replace mw_gnrl = 5.25 ///
if ( st_name == "ak" & ( year == 1996 & month >= 10 ) ) & ///
if ( st_name == "ak" & ( year == 1997 & month <= 8 ) )
replace mw_gnrl = 5.65 ///
if ( st_name == "ak" & ( year == 1997 & month >= 9 ) ) & ///
if ( st_name == "ak" & ( year >= 1998 & year <= 2002 ) )
replace mw_gnrl = 7.15 ///
if ( st_name == "ak" & ( year >= 2003 & year <= 2009 ) )
replace yeff = 1980 ///
if ( st_name == "ak" & year == 1980 )
replace yeff = 1981 ///
if ( st_name == "ak" & ( year >= 1981 & year <= 1989 ) ) & ///
if ( st_name == "ak" & ( year == 1990 & month <= 3 ) )
replace yeff = 1990 ///
if ( st_name == "ak" & ( year == 1990 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year == 1991 & month <= 3 ) )
replace yeff = 1991 ///
if ( st_name == "ak" & ( year == 1991 & month >= 4 ) ) & //
if ( st_name == "ak" & ( year >= 1992 & year <= 1995 ) ) & ///
if ( st_name == "ak" & ( year == 1996 & month <= 9 ) )
replace yeff = 1996 ///
if ( st_name == "ak" & ( year == 1996 & month >= 10 ) ) & ///
if ( st_name == "ak" & ( year == 1997 & month <= 8 ) )
replace yeff = 1997 ///
if ( st_name == "ak" & ( year == 1997 & month >= 9 ) ) & ///
if ( st_name == "ak" & ( year >= 1998 & year <= 2002 ) )
replace yeff = 2003 ///
if ( st_name == "ak" & ( year >= 2003 & year <= 2009 ) )
replace meff = 1 ///
if ( st_name == "ak" & year == 1980 ) & ///
if ( st_name == "ak" & ( year >= 1981 & year <= 1989 ) ) & ///
if ( st_name == "ak" & ( year == 1990 & month <= 3 ) ) & ///
if ( st_name == "ak" & ( year >= 2003 & year <= 2009 ) )
replace meff = 4 ///
if ( st_name == "ak" & ( year == 1990 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year == 1991 & month <= 3 ) ) & ///
if ( st_name == "ak" & ( year == 1991 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year >= 1992 & year <= 1995 ) ) & ///
if ( st_name == "ak" & ( year == 1996 & month <= 9 ) )
replace meff = 10 ///
if ( st_name == "ak" & ( year == 1996 & month >= 10 ) ) & ///
if ( st_name == "ak" & ( year == 1997 & month <= 8 ) )
replace meff = 9 ///
if ( st_name == "ak" & ( year == 1997 & month >= 9 ) ) & ///
if ( st_name == "ak" & ( year >= 1998 & year <= 2002 ) )

replace deff = 1 ///
if ( st_name == "ak" & year == 1980 ) & ///
if ( st_name == "ak" & ( year >= 1981 & year <= 1989 ) ) & ///
if ( st_name == "ak" & ( year == 1990 & month <= 3 ) ) & ///
if ( st_name == "ak" & ( year == 1990 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year == 1991 & month <= 3 ) ) & ///
if ( st_name == "ak" & ( year == 1991 & month >= 4 ) ) & ///
if ( st_name == "ak" & ( year >= 1992 & year <= 1995 ) ) & ///
if ( st_name == "ak" & ( year == 1996 & month <= 9 ) ) & ///
if ( st_name == "ak" & ( year == 1996 & month >= 10 ) ) & ///
if ( st_name == "ak" & ( year == 1997 & month <= 8 ) ) & ///
if ( st_name == "ak" & ( year == 1997 & month >= 9 ) ) & ///
if ( st_name == "ak" & ( year >= 1998 & year <= 2002 ) ) & ///
if ( st_name == "ak" & ( year >= 2003 & year <= 2009 ) )
save dt_mw_2009_04_20_m, replace
再例如AL州的子程序 (Alabama does not have its own state minimum wage in its history)
local varlist1 "ds_agrclt_a ds_agrclt_y ds_frst60_a ds_frst60_y ds_frst90_a = 1 ds_frst90_y = 1
ds_gnrl = 1 ds_oppr_nonagrclt = 1 ds_oppr_tip = 1 ds_prob_agrclt_a = 1 ds_prob_agrclt_y = 1
ds_prob_nonagrclt_a = 1 ds_prob_nonagrclt_y = 1 ds_prob_tip_a = 1 ds_prob_tip_y = 1 ds_small_a = 1
ds_small_y = 1 ds_student = 1 ds_tip_a = 1 ds_tip_y = 1 ds_women = 1 ds_without_ins = 1 ds_youth = 1"
foreach var1 of varlist1 ds_agrclt_a ds_agrclt_y ds_frst60_a ds_frst60_y ds_frst90_a = 1 ds_frst90_y = 1
ds_gnrl = 1 ds_oppr_nonagrclt = 1 ds_oppr_tip = 1 ds_prob_agrclt_a = 1 ds_prob_agrclt_y = 1
ds_prob_nonagrclt_a = 1 ds_prob_nonagrclt_y = 1 ds_prob_tip_a = 1 ds_prob_tip_y = 1 ds_small_a = 1
ds_small_y = 1 ds_student = 1 ds_tip_a = 1 ds_tip_y = 1 ds_women = 1 ds_without_ins = 1 ds_youth = 1
{
replace `var1' = 1 if st_name == "al"
}
local varlist2 "yeff meff deff ypssd mpssd dpssd dexm nmw mw_gnrl mw_youth mw_tip_a mw_tip_y mw_small_a
mw_small_y mw_agrclt_a mw_agrclt_y mw_student mw_frst90_a mw_frst90_y mw_frst60_a mw_frst60_y mw_with_ins
mw_without_ins mw_women mw_prob_nonagrclt_a mw_prob_nonagrclt_y mw_prob_agrclt_a mw_prob_agrclt_y
mw_prob_tip_a mw_prob_tip_y mw_oppr_nonagrclt mw_oppr_tip"
foreach var2 of varlist2 yeff meff deff ypssd mpssd dpssd dexm nmw mw_gnrl mw_youth mw_tip_a mw_tip_y mw_small_a
mw_small_y mw_agrclt_a mw_agrclt_y mw_student mw_frst90_a mw_frst90_y mw_frst60_a mw_frst60_y mw_with_ins
mw_without_ins mw_women mw_prob_nonagrclt_a mw_prob_nonagrclt_y mw_prob_agrclt_a mw_prob_agrclt_y
mw_prob_tip_a mw_prob_tip_y mw_oppr_nonagrclt mw_oppr_tip
{
replace `var2' = 9999 if st_name == "al"
}
save dt_mw_2009_04_20_m, replace
其他的州与之类似,我打算将每个州的子程序名为Prog_AK(州名的英文缩写).do 这样就可以得到若干个do子程序
我现在的问题是:
1 这样写子程序可以不?特别是我AL州的foreach语句这样写法可以么? 还有什么需要注意的么?是不是要保存为ado文件呢?还是直接作为do文件放在C:\data下面?
2. 这个主程序应该怎么写啊?我尝试了下
local varlist1 "AK AL ....(美国50个州的名字)"
foreach var1 of varlist1 AK AL... (美国50个州的名字)
{
infile prog_`var1'.do
do prog_`var'.do
}
这样可以么?我在stata里头运行不出来啊
望各位大侠指教,非常非常感谢了~~~~~~
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-536443-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版