小编Las*_*zlo的帖子

使用SAS转换格式(从日期到数字)

我正在使用SAS中的数据集,其中包含许多变量.

其中一个变量是DATE变量,它具有日期/时间格式.它看起来像这样:

12FEB97:00:00:00  
27MAR97:00:00:00  
14APR97:00:00:00
Run Code Online (Sandbox Code Playgroud)

现在问题是我想将此变量转换为NUMERIC格式.我希望得到以下结果(基于之前显示的3个示例):

199702  
199703  
199704  
Run Code Online (Sandbox Code Playgroud)

你有什么想法怎么做吗?我已经阅读了很多文档,pdf等,但仍然找不到合适的解决方案.
非常感谢你!

sas

7
推荐指数
1
解决办法
4万
查看次数

计算data.frame子集中数字的出现次数

我在R中有一个数据帧,类似于以下内容.实际上我真正的"df"数据框架比这里的数据框架大得多,但我真的不想让任何人感到困惑,所以这就是为什么我尽量简化事情.

所以这是数据框架.

id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)   
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,3)

df <-data.frame(id,a,b,c,d,e)
df
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是获取每列(a,b,c,d,e)和每个id组(1,2,3)的数字出现(对于后面的分组,请参阅我的列'id ").

因此,对于列'a'和id号'1'(后者见列'id'),代码将是这样的:

as.numeric(table(df[1:10,2]))

##The results are:
[1] 3 7
Run Code Online (Sandbox Code Playgroud)

只是简单地解释一下我的结果:在'a'栏中(并且仅关注那些'id'栏中编号为'1'的记录)我们可以说数字'1'出现3次而数字'3'出现7次.

再次,只是为了向您展示另一个例子.对于列'a'和id号'2'(对于后一个分组,请再次查看列'id'):

as.numeric(table(df[11:20,2]))

##After running the codes the results are: 
[1] 4 3 3
Run Code Online (Sandbox Code Playgroud)

让我再解释一下:在'a'栏中,只关注那些在'id'栏中有数字'2'的观察,我们可以说数字'1'出现4次,数字'2'出现3次和数字'3'发生了3次.

所以这就是我想做的.计算每个自定义子集的数字出现次数(然后将这些值收集到数据框中).我知道这不是一项艰巨的任务,但问题是我必须定期更改输入'df'数据帧,因此行和列的总数可能随时间而变化......

到目前为止我所做的是我将'df'数据帧与列分开,如下所示:

for (z in (2:ncol(df))) assign(paste("df",z,sep="."),df[,z])
Run Code Online (Sandbox Code Playgroud)

所以df.2将引用df $ a,df.3将等于df $ b,df.4将等于df $ c等.但我现在真的被卡住了,我不知道如何继续前进...

是否有适当的"自动"方式来解决这个问题?

r subset

3
推荐指数
1
解决办法
1230
查看次数

"说服"制表函数来计算[R]中数据框中的NA

我想再问你一个问题.它主要是关于[R]中的数据帧,NA和制表功能.

我有这个数据框.我已经在之前的一个问题中使用了这个.它故意看起来很简单,我真正的"df"数据框实际上要大得多,我不愿意惹恼任何拥有庞大数据库的人...所以,我的数据库:

id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,4)
df <-data.frame(id,a,b,c,d,e)
df
Run Code Online (Sandbox Code Playgroud)

我已经设法计算了在'b'到'e'列中出现的数字的分布,但同时考虑到这些分布应该由'id'列中的id号"分组"的事实.它工作正常,检查 - >

matrix(matrix(unlist(lapply(df[,(-(1))], 
       function(x) tapply(x,df$id,tabulate,
                          nbins=nlevels(factor(df[,2])))) [[1]])), 
              ncol=3,nrow=3,byrow=TRUE)

matrix(matrix(unlist(lapply(df[,(-(1))],function(x) tapply(x,df$id,tabulate,nbins=nlevels(factor(df[,3])))) [[2]])),ncol=3,nrow=3,byrow=TRUE)

matrix(matrix(unlist(lapply(df[,(-(1))],function(x) tapply(x,df$id,tabulate,nbins=nlevels(factor(df[,4])))) [[3]])),ncol=3,nrow=3,byrow=TRUE)

matrix(matrix(unlist(lapply(df[,(-(1))],function(x) tapply(x,df$id,tabulate,nbins=nlevels(factor(df[,5])))) [[4]])),ncol=3,nrow=3,byrow=TRUE)

matrix(matrix(unlist(lapply(df[,(-(1))],function(x) tapply(x,df$id,tabulate,nbins=nlevels(factor(df[,6])))) [[5]])),ncol=4,nrow=3,byrow=TRUE)
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如果我的数据框在这里和那里包含NA值,如果我希望我的内置制表函数也能收集这些NA怎么办?那么如果我想要计算这些NA的出现次数呢?

这是我修改过的数据框与NA:

id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(NA,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,NA,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,NA,1,4)
df <-data.frame(id,a,b,c,d,e)
df
Run Code Online (Sandbox Code Playgroud)

起初我尝试过这样的事情:

unlist(lapply(df[,(-(1))],function(x) tapply(x,df$id,tabulate,nbins=nlevels(factor(df[,2],exclude=NULL)))) [[1]])
Run Code Online (Sandbox Code Playgroud)

你看,我唯一做的就是我试图应用这个exclude=NULL东西.

至少我的代码意识到我在列中有4个不同的级别,a (1,2,3,NA)而不仅仅是3个(1,2,3).在这里查看:

nlevels(factor(df[,2], exclude=NULL))
Run Code Online (Sandbox Code Playgroud)

但是你在结果中看到它无法以某种方式计算NA.它说

3  0  6  0  4  3  3  0  4 …
Run Code Online (Sandbox Code Playgroud)

r dataframe

1
推荐指数
1
解决办法
567
查看次数

标签 统计

r ×2

dataframe ×1

sas ×1

subset ×1