0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【R】固定長データ(.txt)の連続読み込みとStataデータ(.dta)への出力

Last updated at Posted at 2020-12-05
  • 以下のようなファイル名を持つ固定長データがあるとする:data_H22.txt, data_H23.txt, ...,data_H30.txt, data_R01.txt

  • 各変数の長さ(width)と変数名は別のCSVファイル(varname_H22.csv, ...)で定義されている

  • 例えば 固定長データの1行目が「xxxyyzzzz...」となっているとすると、最初の4文字が変数x、次の2文字が変数y、次の4文字が変数zといった具合。この場合、varname_*.csvは以下のような中身。
     image.png

  • 以下のRコードは、これらの固定長データを連続で読み込み、Stataデータ形式で出力するものである。

txt2data.R
# install.packages("haven", dependencies = TRUE) # install package if necessary
# install.packages("tidyverse")
library(tidyverse)
library(haven)

setwd("C:/Users/CurrentDirectory") 

primes_list <- list("H22", "H23", "H24", "H25", "H26", "H27", "H28", "H29", "H30", "R01")

for (y in primes_list) {
  datafilename.input <- paste("data_", y, ".txt", sep = "") # filename: data_*.txt 
  varfilename <- paste("varname_", y, ".csv", sep = "") # filename: varname_*.txt

  d.varname <- read.csv(varfilename) # import varname file
  width <- d.varname$column  # vector of width
  varname <- d.varname$varname # vector of variable name

  data <- read.fwf(datafilename.input, width = width, col.names = varname) # import data

  # readrパッケージを使う場合
  # d <- read_fwf(datafilename.input, fwf_widths(width, col_names = varname)) # import data
 
  datafilename.output <- paste("data_", p, ".dta", sep = "")  # filename: data_*.dta
  write_dta(data, datafilename.output) # export as .dta file
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?