有一个给定的虚拟数据集。我正在尝试将其导入SAS环境,我也在RStudio中尝试过它。但我无法抓住正确的输出。提供的数据集如下:
1 "name, age, salary, zipcode"
2 "A, 1, 100, 10010 B, 2, 200, 10011 C, 3, 300, 10012 D, 4, 400, 10014"
我从CSV文件中复制了数据。第1行位于CSV的第一个单元格中,第2行位于第一个单元格下方的第二个单元格中。
PS:10010是邮政编码,其中B是名称,B是下次观察的开始,类似地C是下一个观察,D是下一个观察。
所需的输出是:
Name Age Salary Zipcode
A 1 100 10010
B 2 200 10011
C 3 300 10012
D 4 400 10014
我从一天前就遇到了这个问题。我只能在数据集周围移动以移动观察结果。此外,双重值使得这个问题变得非常复杂。 SAS或R上的工作解决方案可以很好地工作。
编辑:我在SAS中尝试了以下代码。感谢SMW的指点。 :)
data new;
length Name $2 Age 8. Salary 8. Zipcode 8.;
infile 'book1.csv' dsd dlm = ',' firstobs = 2 LRECL =17 ;
input Name $ Age Salary Zipcode @@;
run;
此致
答案 0 :(得分:3)
导入列名并准备
nam <- read.table("csv.csv", header=F, nrow=1, stringsAsFactors=F)
nam <- gsub(",", "", nam)
nam <- nam[2] # resolve " " in original data
nam <- strsplit(nam, split=" ") #
将大小名称大写
library(Hmisc) # edited
nam <- capitalize(nam) # edited
导入剩余文件
dd <- read.table("csv.csv", skip=1, sep="", stringsAsFactors=F)
重新排序文件,提取第一列
col_1 <- gsub(",", "", as.vector(dd[seq(from=1, to=16,by=4)])[1,])
提取剩余的列
col_all <- as.data.frame(t(matrix(dd, ncol=4)))
清除逗号
col_all <- apply(apply(col_all[-1], 2, gsub, patt=",", replace=""), 2, as.numeric)
并设置最终对象
data <- as.data.frame(cbind(col_1, col_all))
names(data) <- nam
data # ouput
Name Age Salary Zipcode
1 A 1 100 10010
2 B 2 200 10011
3 C 3 300 10012
4 D 4 400 10014
已编辑:仅使用基本功能进行大写。避免使用library(Hmisc)
和以下代码行。
nam <- unlist(lapply(nam, function(x) {
paste(toupper(substring(x, 1, 1)), substring(x, 2, max(nchar(nam))), sep="")
}))
答案 1 :(得分:0)
您可以要求SAS将逗号,空白和引用视为分隔符,并使用trail @@允许它从一行读取多个观察值。
让我们构建您的示例数据文件。
filename example temp;
data _null_;
file example;
put '"name, age, salary, zipcode"'
/ '"A, 1, 100, 10010 B, 2, 200, 10011 C, 3, 300, 10012 D, 4, 400, 10014"'
;
run;
现在看了。
data want;
length Name $2 Age 8. Salary 8. Zipcode 8.;
infile example dlm = ' ,"' firstobs = 2 ;
input Name $ Age Salary Zipcode @@;
run;