gpt4 book ai didi

R - 使用 .sas 字典文件和 SAScii 导入 ASCII 数据

转载 作者:行者123 更新时间:2023-12-02 08:19:55 24 4
gpt4 key购买 nike

我最近下载了一些 ASCII 格式的数据,这些数据附带 SAS 设置文件,我想将其与 R 一起使用。这里有一个这样的数据文件:

https://dl.dropboxusercontent.com/u/8474088/Data.txt

此处包含相应的 SAS 设置文件:

https://dl.dropboxusercontent.com/u/8474088/Setup.sas

我应该注意到,安装文件旨在处理大约 50 个具有相似结构的不同数据文件(上面的链接是其中之一的示例)。

在找到 SAScii 包后,我认为自己状况良好,但无法使用 read.SAScii 或 parse.SAScii 来处理这些文件。任一命令都会出错。

read.SAScii(data.file,setup.file,beginline=581)

Error in if (as.numeric(x[j, "start"]) > as.numeric(x[j - 1, "end"]) + :
missing value where TRUE/FALSE needed
In addition: Warning message:
NAs introduced by coercion

parse.SAScii(setup.file,beginline=581)

Error in if (as.numeric(x[j, "start"]) > as.numeric(x[j - 1, "end"]) + :
missing value where TRUE/FALSE needed
In addition: Warning message:
NAs introduced by coercion

SAScii 文档中给出的示例使用更简单的设置文件,因此我想知道上述文件的复杂性是否导致了问题(例如,文件中在 INPUT 命令之前列出的 VALUE 信息)。

任何关于如何继续的想法都会很棒。提前致谢。

最佳答案

details section of the parse.SAScii help 中所述,这个包无法读取重叠的列..并且您的文件显然有它们。 ;) 为了使 SAScii 正常工作,您必须将 .sas 文件分解为硬盘驱动器上的四个单独的 .sas 文件。方法如下-

# load all necessary libraries
library(stringr)
library(SAScii)
library(downloader)

# create two temporary files
tf <- tempfile()
tf2 <- tempfile()

# download the sas import script
download( "https://dl.dropboxusercontent.com/u/8474088/Setup.sas" , tf )

# download the actual data file
download( "https://dl.dropboxusercontent.com/u/8474088/Data.txt" , tf2 )

# read the sas importation instructions into R
z <- readLines( tf )

# here are the break points
z[ substr( str_trim( z ) , 1 , 1 ) == '#' ]

sas.script.breakpoints <- which( substr( str_trim( z ) , 1 , 1 ) == '#' )

script.one <- z[ 581:sas.script.breakpoints[1] ]
script.two <- z[ sas.script.breakpoints[1]:sas.script.breakpoints[2] ]
script.three <- z[ sas.script.breakpoints[2]:sas.script.breakpoints[3] ]
script.four <- z[ sas.script.breakpoints[3]:length(z) ]

# replace some stuff so these look like recognizable sas scripts
script.one[ length( script.one ) ] <- ";"

script.two[ 1 ] <- "input blank 1-300"
script.two[ length( script.two ) ] <- ";"

script.three[ 1 ] <- "input blank 1-300"
script.three[ length( script.three ) ] <- ";"

script.four[ 1 ] <- "input blank 1-300"

# test then import data set one
writeLines( script.one , tf )
parse.SAScii( tf )
x1 <- read.SAScii( tf2 , tf )

# test then import data set two
writeLines( script.two , tf )
parse.SAScii( tf )
x2 <- read.SAScii( tf2 , tf )

# test then import data set one
writeLines( script.three , tf )
parse.SAScii( tf )
x3 <- read.SAScii( tf2 , tf )

# test then import data set four
writeLines( script.four , tf )
parse.SAScii( tf )
x4 <- read.SAScii( tf2 , tf )

关于R - 使用 .sas 字典文件和 SAScii 导入 ASCII 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16724971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com