2023-11-13 11:17:25 +00:00
|
|
|
---
|
|
|
|
title: Stata DTA File Processor
|
|
|
|
sidebar_label: Stata DTA Codec
|
|
|
|
hide_table_of_contents: true
|
|
|
|
---
|
|
|
|
|
|
|
|
<head>
|
2024-03-22 04:45:40 +00:00
|
|
|
<script src="https://cdn.sheetjs.com/dta-0.0.2/package/dist/dta.min.js"></script>
|
2023-11-13 11:17:25 +00:00
|
|
|
</head>
|
|
|
|
|
|
|
|
:::info pass
|
|
|
|
|
|
|
|
This discussion focuses on the Stata DTA codec. For integrating SheetJS in a
|
|
|
|
Stata extension, there is a [dedicated demo](/docs/demos/extensions/stata).
|
|
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
[Stata](https://stata.com/) is a statistical software package. Econometricians
|
|
|
|
and social scientists have used Stata for data processing and statistical
|
|
|
|
analysis. Many legacy datasets are only available in Stata DTA data files.
|
|
|
|
|
2024-03-22 04:45:40 +00:00
|
|
|
The SheetJS DTA codec enables websites and automated data pipelines to integrate
|
2023-11-13 11:17:25 +00:00
|
|
|
data from DTA files.
|
|
|
|
|
2024-10-07 21:41:19 +00:00
|
|
|
Source code and project documentation are hosted on the SheetJS Git server at
|
2024-04-08 04:47:04 +00:00
|
|
|
https://git.sheetjs.com/sheetjs/sheetjs/src/branch/master/packages/dta
|
2023-11-13 11:17:25 +00:00
|
|
|
|
|
|
|
:::caution DTA support is considered experimental.
|
|
|
|
|
|
|
|
Great open source software grows with user tests and reports. Issues should be
|
|
|
|
reported to [the issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues).
|
|
|
|
|
|
|
|
:::
|
|
|
|
|
2024-04-11 17:44:06 +00:00
|
|
|
:::info Limitations
|
|
|
|
|
|
|
|
In Stata parlance, versions 102-105, 108, 110-115, and 117-121 are supported.
|
|
|
|
This corresponds to the known file versions across all releases through Stata 18.
|
|
|
|
|
|
|
|
Consistent with spreadsheet software limitations, the first 1048576 observations
|
|
|
|
and 16384 variables are extracted.
|
|
|
|
|
|
|
|
Alias variables (supported in DTA versions 120-121) are not processed.
|
|
|
|
|
|
|
|
:::
|
|
|
|
|
2023-11-13 11:17:25 +00:00
|
|
|
## Live Demo
|
|
|
|
|
|
|
|
This demo fetches a [sample DTA file](pathname:///dta/pres.dta), parses the data
|
|
|
|
using the SheetJS DTA Codec and displays the data in an HTML table using the
|
|
|
|
`sheet_to_html` method[^1].
|
|
|
|
|
|
|
|
:::tip pass
|
|
|
|
|
|
|
|
The file input element can be used to parse a file on your computer.
|
|
|
|
|
|
|
|
**All work is performed in the web browser! Data never leaves your machine!**
|
|
|
|
|
|
|
|
If you find any unexpected results or errors in testing, please report an issue
|
|
|
|
at [the issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues).
|
|
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
```jsx live
|
|
|
|
function SheetJSDTA() {
|
|
|
|
const [__html, setHTML] = React.useState("");
|
|
|
|
const [text, setText] = React.useState("");
|
|
|
|
|
2024-04-11 17:44:06 +00:00
|
|
|
const process = (ab) => {
|
2023-11-13 11:17:25 +00:00
|
|
|
try {
|
|
|
|
/* Initial Setup */
|
|
|
|
if(typeof DTA == "undefined") return setText("ERROR: Reload this page!");
|
|
|
|
DTA.set_utils(XLSX.utils);
|
|
|
|
|
|
|
|
/* Parse DTA */
|
2024-04-11 17:44:06 +00:00
|
|
|
const wb = DTA.parse(new Uint8Array(ab));
|
2023-11-13 11:17:25 +00:00
|
|
|
|
|
|
|
/* Generate HTML */
|
|
|
|
setHTML(XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]));
|
|
|
|
setText("");
|
|
|
|
} catch(e) { setText("ERROR: " + (e && e.message || e)); }
|
|
|
|
};
|
|
|
|
|
2024-04-11 17:44:06 +00:00
|
|
|
/* Fetch test file on load */
|
2023-11-13 11:17:25 +00:00
|
|
|
React.useEffect(() => { (async() => {
|
2024-04-11 17:44:06 +00:00
|
|
|
process(await (await fetch("/dta/pres.dta")).arrayBuffer());
|
2023-11-13 11:17:25 +00:00
|
|
|
})(); }, []);
|
|
|
|
|
2024-04-11 17:44:06 +00:00
|
|
|
const good = { backgroundColor: "#C6EFCE", color: "#006100" };
|
|
|
|
const bad = { backgroundColor: "#FFC7CE", color: "#9C0006" };
|
2023-11-13 11:17:25 +00:00
|
|
|
return ( <>
|
|
|
|
<input type="file" onChange={async(e) => {
|
2024-04-11 17:44:06 +00:00
|
|
|
process(await e.target.files[0].arrayBuffer());
|
2023-11-13 11:17:25 +00:00
|
|
|
}}/>
|
2024-04-11 17:44:06 +00:00
|
|
|
{text && <code style={/ERROR/.test(text)?bad:good}>{text}</code>}
|
2023-11-13 11:17:25 +00:00
|
|
|
<div dangerouslySetInnerHTML={{ __html }}/>
|
|
|
|
</> );
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
[^1]: See [`sheet_to_html` in "Utilities"](/docs/api/utilities/html#html-table-output)
|