browseEconometrics Lab 1
Working with data in Stata
For this lab you will be using a dataset supplied by the UK Data Service under an End User License. Before accessing the dataset, you need to do ONE of the following:
go to UK Data Service and register an academic account using “University of St Andrews” as your institution.
OR sign the physical license agreement available to you in class.
Once you have have completed either of these, you can access the data via Moodle so long as you:
- agree to the Data Access Quiz.
Upon submitting the quiz, you will be shown a link to the data.
Download the “shs2023.dta” file. For this lab you do not need the “shs2023.csv” file.
Stata
Why Stata
Stata is a proprietory statistical software used by researchers. Estimates of Stata usage in Economics suggest that 71% of replication packages in economic journals contain Stata .do scripts (i.e. Stata code) (Source: Economics and R Blog). R is rising, but still only found in 9.8% of replication packages.
Why Stata? Part of the story is network ‘lock-in’: academics train students to use the tools they know. But the software has its merits and developed the right set of tools for the data available at the time. These strengths are:
Stata’s command-line functionality allows for reproducible workflows, without requiring general programming language expertise. While not a complete language, Stata does have programming features; like loops, macros, and functions.
Stata’s own packages and commands come with extensive documentation and are rigorously tested. User-written commands are community-vetted through the Statistical Software Components (SSC), with many Econometrician contributors.1
For smaller datasets, Stata is fast! It processes data by first loading it into memory on the computer, which makes all computations rather efficient. However, this also means that Stata is limited by the available RAM (computer memory).
Stata is designed to analyse and manage rectangular datasets: each row is an observation, with each column a new variable. For example, survey data where each row represents a respondent and each column a survey question response. Indeed, Stata has many functions designed specifically for the analysis of cross-sectional and longitudinal surveys, which are extensively used in applied economics research.
Stata’s .dta format preserves variable metadata (labels, formats, notes), making it easier to share documented datasets compared to plain text formats like CSV. This aids in collaboration and the sharing of vital metadata between data providers (e.g. surveyors) and users.
Many of these strengths are not unique to Stata but, put together, they demonstrate why Stata became so widely used in applied economics research beginning in the 1990s. This was a period of increasing access to high quality micro-level survey data, improved computing, new econometrics methods, and the ‘Credibility Revolution’ in Economics.
BUT, these strengths also point to Stata’s vulnerabilities. In the age of the internet, we are surrounded by data, but much of this data is not rectangular (‘tidy’). Moreover, Stata is not designed to work with BIG data. For this reason, data scientists and engineers increasingly work with R and Python. And many of the econometrics packages that made Stata the default option for economists are now available in these open source languages.
Should you learn Stata? Sure! Stata provides an easy introduction to data management, econometric analysis, and basic programming. These skills are transferable to many data analysis settings; including working with data in Excel. And once you have mastered Stata, it will be relatively easy to adapt those skills to a programming language setting.
There is one major consideration: you will have remote access to Stata via AppsAnywhere. You can sign into AppsAnywhere from your own computer so long as you are connected to the campus network (or VPN), but will not be able to install the software directly on your computer. Of course, you are free to purchase your own Stata license. Unfortunately, AppsAnywhere will not allow you install user-written packages.
Data
Find the downloaded file “shs2023.dta” in the “Downloads” folder. This is a Stata dataset saved in its custom .dta file format. Move the file from the Downloads folder to a location on either your OneDrive or ‘Home Drive (H:)’. A good idea would be to create an EC3301 folder in the Documents folder of either drives. Then create a sub-folder for this lab: “..". Move shs2023.dta to this folder.
Opening a .dta file
Now, back in Stata:
- Navigate to ‘File>Open’
- Locate the folder where you stored “shs2023.dta”
- Select ‘Open’
The Variables and Properties window should now be populated with information about the “shs2023.dta”. In the output window you should see the output:
. use "..\EC3301\Lab 1\shs2023.dta"
The same operation of opening the data through menus can be replicated using the command use. Use the History window to copy the line into the Command window and (press ENTER on the keyboard). It should open the dataset again.
Viewing and describing the data
You have now opened the dataset (i.e. loaded it into memory) and should see information about the dataset in the Variables and Properties windows.
- How many variables are there?
- How many observations are there?
- What does the variable
hc4measure?
To view the actual data look for the small table icon with the magnifying glass in the top left corner (‘Data Editor (Browse)’). Clicking this button will open a separate window that shows you the data. Notice how the dataset looks like a big ‘rectangle’/matrix, with each variable as a new column.
You can achieve the same result with command:
You can use the search bar at the top of the Variables window to look for variables containing particular information. Equally, you can use the lookfor command. Try to find any variables with information about electricity. For example,
lookfor elec
Variable Storage Display Value
name type format label Variable label
-------------------------------------------------------------------------------
htcostsum_1 byte %8.0g htcostsum_1
Cost of electricity - summary
variable
htcostamt_1 int %8.0g Cost of electricity - amount
variable
This command looks for the phrase elec in either the variable name of label.
Notice, the above command provided a lot of information about two variables in the dataset: Variable name; Storage type; Display format; Value label; and Variable label. The same information can be accessed using the describe command.
describe htcostsum_1Stata does not need the full name of a command to recognise it: the command describe can be shortened to des, even just d. Similarly, so long as there is no ambiguity, you can shorten the name of a variable. The above command can be shortened to d htcostsum_1. Since there is a htcostsum_2, anything short of htcostsum_1 will lead to ambiguity.
Managing data
There are a large number of variables in the dataset and we will not be using all of them. We can drop particular variables we do not need, or keep the variables we will use. Since the latter is a short list, it makes sense to use keep.
- Remove all unnecessary variables using the command:
keep area RTParea MD20QUIN hhsize hb1 hb509 rent_amt rent_sum mortgage_amt mortgage_sum shared_ownership_sum shared_ownership_amtThis command removes the variables from the dataset in memory, NOT the dataset saved on the harddrive of the computer (“..2023.dta”). Removing variables like this is fine, so long as you do not save over the original data. If you make these changes permanent by saving changes to the data (saved on the harddrive), the removed variables will be lost and you would need to recover the original source of data.
The dataset contains the original variable names and labels. Some of variable names correspond to the question in the questionnaire they relate to (e.g. hb1). These names are not very intuitive, so we will begin by renaming certain variables.
- Rename the variable
hb1dwell_typeusing therenamecommand
rename hb1 dwell_type- Rename
hb509own_grp
The labels attached these variables are equally uniformative. We can change the labels using the command variable label
- Label
dwell_type“Type of dwelling”
label var dwell_type "Type of dwelling"- Label
own_grp“Ownership of the dwelling”
Scripts
Reproducibility with .do files
At this stage it is important to stop and think about reproducibility. We have just made changes to the data, changing names and labels, but to reproduce these changes we would have to manually re-execute these commands. This is not very efficient.
This is where a .do file scripts comes in. These are plain text script that are used to store a sequence of commands. They can also include programming features like loops and macros (more on that later). To create a new .do file click on the small page icon with the pencil in the top left corner (‘New Do-file Editor’). This should open a new window that looks like this:

Before you progress, save the file as “lab-1.do” in the same folder where you stored the data.
The text in .do files is interpretted as commands unless commented out. Here are a few ways you can leave comments:
A single
*at the start of a line comments it outA double
\\will also comment out a line and can be used after a command tooThe pair
\*followed by*\can be used to comment out multiple lines.
We can now copy the commands we have executed into our new .do file and add some comments:
* Title: Econometrics Lab 1: Working with data in Stata
* Author: [INSERT NAME]
* Date: [INSERT DATE]
* Open data
use "[INSERT FILE PATH]\shs2023.dta", clear
* Managing data
** 1. Remove all unnecessary variables using the command:
keep area RTParea MD20QUIN hhsize hb1 hb509 rent_amt rent_sum mortgage_amt mortgage_sum shared_ownership_sum shared_ownership_amtCopy and paste the code from exercises 2-5 above (i.e., the rename and label commands).
Notice the extra option , clear after use. This gives Stata permission to reopen the original dataset without saving changes to the current file in memory. It is best practice to never save changes to original data. Instead, save all the changes you made in a .do file so that they are reproducible. When you do need to save changes to the dataset, use the save command to save the data under a new name.
You can execute the .do file using the ‘play’ button in the top left of the editor window (‘Execute selection (do)’). Clicking this will execute the entire file. Alternatively, use your cursor to highlight a line (or multiple lines) and then execute these specific lines using the same ‘do’ button.
The hotkey ‘Ctrl + L’ on the keyboard will highlight the line of the .do file you cursor is on. Then you can use ‘Ctrl + D’ to execute that line.
Variables
Datasets can contain both numerical and string (i.e. text) variables. In this section we will look at two types of numerical variables:
- categorical (discrete) variables where values correspond to distinct categories; e.g. “Renter”, “Owner”
- continuous variables can take on any value along the real line; the amount paid for rent (likely stored as an integer)
A priori it is not always obvious which variables are which. You can use the codebook command to check how many unique values a variable takes on:
codebook dwell_type
-------------------------------------------------------------------------------
dwell_type Type of dwelling
-------------------------------------------------------------------------------
Type: Numeric (byte)
Label: hb1
Range: [1,3] Units: 1
Unique values: 3 Missing .: 0/10,496
Tabulation: Freq. Numeric Label
7,379 1 House or bungalow
3,086 2 A flat, maisonette or apartment
(including )
31 3 Other, including room(s),
caravan/mobile homes
Categorical variables
The simplest way to summarize the information in a categorical variable is to create a frequency table, which can be done using the tabulate (or tab for short) command:
- How many types of dwelling are there in the data?
tab dwell_type
Type of dwelling | Freq. Percent Cum.
----------------------------------------+-----------------------------------
House or bungalow | 7,379 70.30 70.30
A flat, maisonette or apartment (includ | 3,086 29.40 99.70
Other, including room(s), caravan/mobil | 31 0.30 100.00
----------------------------------------+-----------------------------------
Total | 10,496 100.00
The output above shows the labels attached to each category, but not the numerical values that underpin these labels. We can ask Stata to show us this useful information:
numlabel, add
tab dwell_type
Type of dwelling | Freq. Percent Cum.
----------------------------------------+-----------------------------------
1. House or bungalow | 7,379 70.30 70.30
2. A flat, maisonette or apartment (inc | 3,086 29.40 99.70
3. Other, including room(s), caravan/mo | 31 0.30 100.00
----------------------------------------+-----------------------------------
Total | 10,496 100.00
We now see that the variable actually takes on 3 values, each with a label.
How many households live in rented accommodation?
Create a cross-tabulation of the variables
dwell_typeandown_grp. How many households rent a flat in the dataset?The variable
MD20QUIN(Scottish Index of Multiple Deprivation (SIMD), 2020 quintiles) has information about the socio-economic status of the household. Are the observations balanced across quintiles?
You will notice that the labels of the values attached to MD20QUIN are incomplete. The describe command will give us the name of this label.
des MD20QUIN
label list MD20QUIN
Variable Storage Display Value
name type format label Variable label
-------------------------------------------------------------------------------
MD20QUIN byte %25.0g MD20QUIN SIMD 2020 - 1 = 20% most deprived
to 5 = 20% least deprived
MD20QUIN:
1 1. 1 - 20% most deprived
2 2. 2
3 3. 3
4 4. 4
5 5. 5 - 20% least deprived
We can create our own label and attach them to this variable:
label def QUINTILE 1 "Bottom: 0-20%" 2 "Lower: 20-40%" 3 "Middle: 40-60%" 4 "Upper: 60-80%" 5 "Top: 80-100%"
label val MD20QUIN QUINTILE
tab MD20QUIN
SIMD 2020 - 1 |
= 20% most |
deprived to 5 |
= 20% least |
deprived | Freq. Percent Cum.
---------------+-----------------------------------
Bottom: 0-20% | 1,928 18.37 18.37
Lower: 20-40% | 2,061 19.64 38.00
Middle: 40-60% | 2,267 21.60 59.60
Upper: 60-80% | 2,346 22.35 81.96
Top: 80-100% | 1,894 18.04 100.00
---------------+-----------------------------------
Total | 10,496 100.00
Continuous variables
You do not want to tabulate a continuous variable because it has too many unique values. The simplest way to evaluate the distribution of a continuous variable is with the summarize command (or just sum).
- What is the average amount money paid as rent by households in the data?
sum rent_amt
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
rent_amt | 3,414 477.6421 168.932 290 940
Did you notice that the number of observations is listed as 3,414? Does this match the total number of observations in the dataset? [You can use the
countcommand to check this.]Browse the dataset to investigate:
browse rent_amt.Create a frequency table of the categorical variable
rent_sumto explore why there only 3,414 observations.Use the option
, detailin your summary of bothrent_amtandmortgage_amt. Which has the highest median?
sum rent_amt, detail
sum mortgage_amt, detail
Amount of monthly rent for households that are
renting
-------------------------------------------------------------
Percentiles Smallest
1% 290 290
5% 300 290
10% 320 290 Obs 3,414
25% 360 290 Sum of wgt. 3,414
50% 420 Mean 477.6421
Largest Std. dev. 168.932
75% 530 940
90% 750 940 Variance 28538.04
95% 900 940 Skewness 1.400969
99% 940 940 Kurtosis 4.203235
Amount of monthly mortgage payments for households
with a mortgage
-------------------------------------------------------------
Percentiles Smallest
1% 200 200
5% 250 200
10% 300 200 Obs 2,552
25% 430 200 Sum of wgt. 2,552
50% 600 Mean 675.0862
Largest Std. dev. 314.008
75% 890 1320
90% 1200 1320 Variance 98601.01
95% 1320 1320 Skewness .5740237
99% 1320 1320 Kurtosis 2.383898
Most Stata commands have additional options. These follow the basic command with ,. Use the help command (e.g. help summarize) to see all the options for a command.
Adding conditions
In the previous section we saw that some observations do not have information on rent paid. This is a common feature of survey data, since surveys often include skip patterns: if a household owns the dwelling they live in they will skip the question on monthly rental payments.
In Stata, you can apply if conditions to most commands allowing you to restrict the operation to a subset of data that meets another condition.
In the data there are 2,229 observations that pay rent and provided an estimate of rental income. The following code will compute the average rental payment of these observations by selecting on the sample in this group.
sum rent_amt if rent_sum==1
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
rent_amt | 2,229 490.4217 165.7097 290 940
Notice, you need to know the numerical value of the category of rent_sum, not the value label, to create such a condition.
What is the average mortgage payment of households who own their home and provide a mortgage payment? [According to
mortgage_sumthere are three groups of households for whom we observe a mortgage payment. For the purposes of this question, you can ignore the third category: 3. “Buying with mortgage - amount given by respondent, but not used in imputation routines”]Is the average imputed mortgage payment higher than the average reported payment?
Using the variable
area, which city has higher mean and/or median rental payments: Edinburgh or Glasgow?
Summary statistics
A common task in data analysis is to summarize a continuous variable by values of a categorical variable. There is a simple way to do this using a few different commands.
- We can
tabulatewith thesummarize()option.
tab MD20QUIN, sum(rent_amt)
SIMD 2020 - |
1 = 20% |
most |
deprived to |
5 = 20% | Summary of Amount of monthly rent
least | for households that are renting
deprived | Mean Std. dev. Freq.
------------+------------------------------------
Bottom: 0 | 427.22591 112.6494 1,204
Lower: 20 | 451.14679 147.98941 872
Middle: 4 | 490.12012 166.84147 666
Upper: 60 | 537.70925 192.60511 454
Top: 80-1 | 698.85321 231.81326 218
------------+------------------------------------
Total | 477.64206 168.93205 3,414
- Another command
tableallows for more options. The list of statistics can also correspond to different variables. Tryhelp tableto see all options.
table MD20QUIN, stat(mean rent_amt) stat(sd rent_amt) stat(count rent_amt)
--------------------------------------------------------------------------------------------------------------------------
| Mean Standard deviation Number of nonmissing values
------------------------------------------------------------+-------------------------------------------------------------
SIMD 2020 - 1 = 20% most deprived to 5 = 20% least deprived |
Bottom: 0-20% | 427.2259 112.6494 1,204
Lower: 20-40% | 451.1468 147.9894 872
Middle: 40-60% | 490.1201 166.8415 666
Upper: 60-80% | 537.7093 192.6051 454
Top: 80-100% | 698.8532 231.8133 218
Total | 477.6421 168.932 3,414
--------------------------------------------------------------------------------------------------------------------------
- The command
tabstatis similarly flexible, but uses a different notation:help tabstat.
tabstat rent_amt, by(MD20QUIN) stat(mean sd count)
Summary for variables: rent_amt
Group variable: MD20QUIN (SIMD 2020 - 1 = 20% most deprived to 5 = 20% least de
> prived)
MD20QUIN | Mean SD N
---------------+------------------------------
Bottom: 0-20% | 427.2259 112.6494 1204
Lower: 20-40% | 451.1468 147.9894 872
Middle: 40-60% | 490.1201 166.8415 666
Upper: 60-80% | 537.7093 192.6051 454
Top: 80-100% | 698.8532 231.8133 218
---------------+------------------------------
Total | 477.6421 168.932 3414
----------------------------------------------
- Using the variable
RTParea, compute a table of average rental and mortgage payments by area.
Generate new variables
To create a new variable in Stata you need to use the generate command:
gen amt_sum = .(10,496 missing values generated)
The variable amt_sum has been assigned ‘missing’ values.
sum amt_sum
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
amt_sum | 0
We can now modify the values based on other variables. Let’s assign the vairable values based on the rule:
=1if rent payment observed;=2if mortgage payment observed;=3if shared-ownership payment observed.
We can modify values using the command replace.
replace amt_sum = 1 if rent_amt > 0 & rent_amt != .
replace amt_sum = 2 if mortgage_amt > 0 & mortgage_amt != .
replace amt_sum = 3 if shared_ownership_amt > 0 & shared_ownership_amt != .(3,414 real changes made)
(2,552 real changes made)
(83 real changes made)
Why the additional condition & rent_amt != .? First off, the symbol & means ‘and’, which means that both conditions must be true. The reason for this extra condition is that Stata treats a .-missing value as a very large number. So any condition of the form > will include missing values if they exist. And we know they exist for this variable.
We can check the values of our variable:
tab amt_sum, missing
amt_sum | Freq. Percent Cum.
------------+-----------------------------------
1 | 3,414 32.53 32.53
2 | 2,552 24.31 56.84
3 | 83 0.79 57.63
. | 4,447 42.37 100.00
------------+-----------------------------------
Total | 10,496 100.00
Check that those with rental, mortgage, and shared payments are mutually exclusive.
Create a new variable called
paymentequal to the sum ofrent_amt,mortgage_amt, andshared_ownership_amt. [Hint: you will not be able to do this by adding the variables together.]Compute the mean of
paymentand the number of observations for whichpayment==.. Who has a missing value ofpayment? How should these values be coded?Create a new variable -
pc_payment- equal to the total monthly payment divided by household size. Label the variable “Per capita monthly payment for housing.”Which
areahas the highest average per capita payment?
Graphs
Stata has a number of graphical commands; too many to remember. The best option is to use the interactive menus to set up a graph. Each time you execute a graph using the menus it print the corresponding code in the output window. You can then copy the code from the output window to your .do file to replicate.
Basic graphics
Making a histogram:
- in the main Stata window go to ‘Graphics>Histogram’
- use the ‘Variable’ drop-down menu to select
rent_amount - select ‘Submit’ [If you select ‘OK’, Stata will close the Graphing window. If you want to continue to edit the graph, select ‘Submit’ instead.]
This should create the graph below
(bin=35, start=290, width=18.571429)

and populate the Output window with the code below.
. histogram rent_amt
Copy the line (excluding the .) to your .do file.
Making a frequency bar graph:
- in the main Stata window go to ‘Graphics>Bar chart’
- select the option ‘Graph of percent of frequencies within categories’
- under the ‘Categories’ tab, select ‘Group 1’ and find
RTPareaunder ‘Grouping variable:’ - select ‘Submit’

Again, copy the code to your .do file.
Making a bar graph of means, but categories.
- navigate back to the ‘Bar chart’ window
- under the ‘Main’ tab, select ‘Graph of summary statistics’
- leave the default ‘Statistic’ as a Mean, but select
rent_amtunder ‘Variables’ - select ‘Submit’

The labels of the above graph do not display very well. Navigate back to the ‘Bar chart’ window. Under the ‘Categories’ tab, you will see an option to edit the ‘Properties’ of the categories. See if you can change the angle of labels so that they are displayed at a \(45^\circ\) angle.
Create a graph that displays the average rent and mortgage paid by households in each of the
RTParea. Edit the graph so that it has an informative y-axis title, legend, and title.Create a single graph showing 5 separate histograms of rental payments for each
MD20QUINgroup. Use the ‘By’ tab in the ‘Graphics>Histogram’ window to do this. You can also select the option ‘Add a graph of totals’ to make it an even 6 histograms.
Exporting graphs
Stata has its own file format for graphs .gph. You can save a graph using this format using graph save.
graph save "[INSERT FILE PATH]\EC3301\Lab 1\graph.gph", replaceThe problem is that .gph files have to be opened in Stata, which is not particularly useful. You would rather save an image as a .png or .jpg which can then be opened using a Photo application and easily copied into a Word document.
You can do this using the graph export command.
graph export "[INSERT FILE PATH]\EC3301\Lab 1\file_name.png", replace- Save the last graph you created in the same folder as the data and .do file using the name
hist_rent_by_quintile.png
Logs
We are nearing the end of the lab. Make sure that all the changes you have made to your .do are saved. If you have stored all the relevant code in the .do file, you should be able to replicate your results next time you open Stata.
But what about all of the tables and summary statistics we created in the ‘Output’ window. These are not stored in the .do file. We can store these using a log file.
Logs
A log file keeps a plain text record of all the output shown in the ‘Output’ window. You can store this using a number of file types.
Stata has its own file format for logs .smcl (and also .log). As with the .gph file format, this file-type can only be opened in Stata. There are two ways to initiate a log:
- go to ‘File>Log>Begin’ and save the log file in the directory of choice;
- OR add the following to the top of your .do file.
log using "[INSERT FILE PATH]\EC3301\Lab 1\lab-1.smcl", replaceYou must also then add the following to the end of your .do file:
log closeA better format to use is a plain text format that can then be opened in a text editor like Notepad. Here is how you would do this:
- Add the following to the top of your .do file.
cap log close
log using "[INSERT FILE PATH]\EC3301\Lab 1\lab-1.txt", replace textThe cap log close ensures that you avoid an error message created when you try to restart the log file before closing it.
- Add the following to the bottom of the .do file.
log closeReplication
You are now ready to try and execute all of today’s work, while saving a copy of your graph and a log file. If this works, it will mean that your work is replicable, so long as you have saved your .do file (CHECK).
When you close Stata (don’t do it yet) you will see the following warning you that the data in memory has been changed (from the original file you opened) and if you fail to save these changes they will be lost.

YOU SHOULD SAY NO! Why? Because then you will change the original file and the results will no longer be replicable using your .do file.
Setting a directory
You will have noticed that on several occasions we have had to specify the location of files, like when we exported a copy of the graph and saved the log file. If all your files are stored in the same directory, we can set this once and then Stata will use this as the default location.
cd "[INSERT FILE PATH]\EC3301\Lab 1"Having told Stata the directory on your computer where everything is stored, we can edit the lines for graph export and log using. For example,
graph export "file-name.png", replaceFinal set-up
Here is how your .do file should look:
* Title: Econometrics Lab 1: Working with data in Stata
* Author: [INSERT NAME]
* Date: [INSERT DATE]
* Clear all objects in memory
clear all
* Set directory
cd "[INSERT FILE PATH]\EC3301\Lab 1"
* Start log
cap log close
log using lab-1-log.txt, replace text
* Open data
use "shs2023.dta"
[ALL THE EXERCISES GO HERE!]
* Close log
log closeThe line clear all removes the existing data from memory, as well as any other stored objects (scalars, matrices, macros, estimates, etc.). This is not strictly needed, but if you remove it you should then add the clear as an option to the use command: use "shs2023.dta", clear. Otherwise, you will get an error message when you try to open the data. This is because Stata will not open a new dataset when there is another dataset in memory that has unsaved changes. Adding the clear option (or clear all) gives Stata permission to close the open dataset, despite there being unsaved changes.
Replicate
Having checked the .do file and made sure it is saved, execute the entire file. Check that there are no error messages. If all works, you can then close the .do file editing window and then close Stata, selecting ‘Don’t save’ when it warns you that the data in memory has changed.
Footnotes
Unlike open-source languages like R, StataCorp carries legal liability for its code, making it an attractive choice for economists in litigation support and legal consulting where accountability is important.↩︎


