Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

[no subject]

NumFirms: gives the number of firms for each sector
IP1 until IP67: deflators  
IPUsado: the number of the deflator used for each sector

In another dataset (main dataset), I have some variables ordered by
Sector, Firm, Year

I would like to build a column containing all the deflators used in 
order to merge it with my main dataset.

A simplified subset of my dataset of IPS would look like:

NumFirms  IP1   IP2  ... IP67     IPUsado

2         1     1         1          2
4         1.23  1.12      1.08       1
3          1.45  1.23      1.12      67
.         1.50  1.34      1.16       2 
.         1.53  1.43      1.23       1

I need to create a new variable which would look like:


1.23          this is the IP2 used for the first firm of the first 
1.34          sector  
1.23          this is the IP2 used for the second firm of the first 
1.34          sector  
1.45          this is the IP1 used for the first firm of the
1.50          second sector


1.45          this is the IP1 used for the last(3rd) firm of the
1.50          last sector

Should anyone find another possibility to accomplish that aim, I would be 
very glad to learn it.
I had already succeeded in creating the variable by using the following 
approach. It is really a na´ve one but faster than a nested sequence of fors 
as Mr Winter has warned me.

set more off
local deflator="C:\DATA\RJ\def_96.dta" /*the name of the file containing the 
local num_anos=5 /*number of years*/
use `deflator' 
local q=0
foreach var of varlist _all { 
use `deflator' 
local q=`q'+1
keep `var'
ren `var' var1
save ip`q'.dta, replace}
use "C:\DATA\RJ\Concatena_Oficial.dta", clear /*dataset which contains 
IPUsado and NumF*/
gen parmer=_n
local varMer=NumFirms[1]*`num_anos' /*para nao ter missing na primeira*/
local IPF1=IPUsado[1]
sort parmer
save "C:\DATA\RJ\Col_IP_oficial.dta", replace
su NumFirms, meanonly
local Tot_set=r(N)
set obs `varMer'
cd C:\DATA
merge using  ip`IPF1'.dta
drop _merge parmer
ren var1 var2
local step1=var2[1]
local step2=var2[2]
local step3=var2[3]
local step4=var2[4]
local step5=var2[5]
egen var1=fill( `step1' `step2' `step3' `step4' `step5' `step1' `step2' 
`step3' `step4' `step5')
drop var2
forvalues sector=2 3 to `Tot_set' {
        local Tot_Firm=NumFirms[`sector']   
        local IP=IPUsado[`sector']      
        forvalues firm=1 2 to `Tot_Firm' { 
               append using"c:\Data\ip`IP'.dta" 


I am new to Stata, and I am meaning to use it as much as possible,
thanks again for the attention,

Ps.:A matlab code to achieve the same result would be sth like:  

for i=1:size(NumFirms,1)
   Super=[Super; repmat(IPA(:,IPUsado(i,1)),NumFirms(i,1),1)];
clear i

but I do not feel like changing packages every time I need to solve a problem.

*   For searches and help try:

© Copyright 1996–2015 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index