﻿*////////////////////////////////////////////.
DEFINE !inequal (sal	=!TOKENS(1) 
		/data	=!DEFAULT('i') !TOKENS(1)
		/ntiles	=!DEFAULT('0') !TOKENS(1)
		/yr	=!TOKENS(1))

* data=i means individual data are supplied
* data=g means grouped data are supplied (number of persons and total earnings are given for each group).
* data=w means weighted data are supplied (the weight variable is assumed to be called "a")
* ntiles=0 means group data using sal.
* ntiles>0 means group data using ntiles of sal.

COMPUTE dummy=1.		

!IF (!data !NE 'g') !THEN

* Weight data if needed.
!IF (!data !EQ 'w') !THEN
WEIGHT BY a.
!IFEND

* delete cases with missing !sal.
SELECT IF ~MISSING(!sal).

!IF (!ntiles !NE '0') !THEN
* Need to group data by ntiles.
!LET !brkvar=nsal
RANK
  VARIABLES=!sal  (A) /NTILES (!ntiles) INTO !brkvar /PRINT=YES
  /TIES=MEAN .
!ELSE
* need to group by sal.
!LET !brkvar=!sal
!IFEND

* Find the totals by group.
AGGREGATE
  /OUTFILE='h:\AGGR as needed.SAV'
  /BREAK=!brkvar
  /ai = N(!sal) /ei = SUM(!sal) /dummy=FIRST(dummy).

* Find the grand totals.
AGGREGATE
  /OUTFILE=*
  /BREAK=dummy
  /atot = N(!sal) /etot = SUM(!sal).

* add the grand totals to the file containing group totals.
MATCH FILES /TABLE=*
 /FILE='h:\AGGR as needed.SAV'
 /BY dummy.
SORT CASES BY !brkvar(A).
!IFEND

!IF (!data !EQ 'g') !THEN
* data is already grouped, find grand totals and add this info to the file.
AGGREGATE
  /OUTFILE='h:\AGGR as needed.SAV'
  /BREAK=dummy
  /atot = SUM(ai) /etot = SUM(!sal).
MATCH FILES /FILE=*
 /TABLE='h:\AGGR as needed.SAV'
 /BY dummy.
!IFEND

***********************.
* 
* Compute the coefficient
*
***********************.

* Compute the GINI coefficient.
CREATE csai csei=CSUM(ai ei).
COMPUTE gini1=(2*csei-ei)*ai/(etot*atot).
CREATE gini2=CSUM(gini1).
COMPUTE zgini=1-gini2.

* Print values of the inequality measures.
MATCH FILES FILE=* /BY dummy /LAST=last.
TEMPORARY.
SELECT IF last.
!LET !title=!QUOTE(!CONCAT('Gini Coefficient',!UNQUOTE(!yr)))
SUMMARIZE
  /TABLES=zgini 
  /FORMAT=VALIDLIST NOCASENUM TOTAL
  /TITLE=!title
  /MISSING=VARIABLE
  /CELLS=NONE.

* Print information on the groups.
COMPUTE pccsei=csei/etot*100.
COMPUTE pccsai=csai/atot*100.
COMPUTE refline=pccsai.
COMPUTE avg=ei/ai.
FORMATS avg ei(COMMA12.0) pccsai pccsei (PCT6.1).

SAVE OUTFILE='h:\temp2.sav'.

* Create a dummy case with zero values for the following 3 variables.
NEW FILE.
INPUT PROGRAM.
COMPUTE pccsai=0.
COMPUTE pccsei=0.
COMPUTE refline=0.
END CASE.
END FILE.
END INPUT PROGRAM.

* Add the dummy case to the data file to force Lorenz curve to start at (0,0).
ADD FILES /FILE=*
 /FILE='h:\temp2.sav'.
FORMATS pccsai pccsei refline (PCT6.0).
!LET !title=!QUOTE(!CONCAT('Lorenz curve ',!UNQUOTE(!yr)))
GRAPH
  /TITLE=!title
  /SCATTERPLOT(OVERLAY)= pccsai pccsai WITH pccsei refline  (PAIR)
  /MISSING=LISTWISE .

EXECUTE.
!ENDDEFINE.
*////////////////////////////////////////////.

!inequal sal=ei data=g.
