【问题标题】:Sas working with observationsSas 处理观察结果
【发布时间】:2018-02-23 07:30:52
【问题描述】:

我是 SAS 新手,但熟悉 R、MATLAB 和 Stata。

我在研究时还没有发现的一件事是能够处理整个数据集中的单个观察结果。假设这个数据集是我正在处理的每一步:

Stock     Volume1 Volume2 Volume3
Apple     200     100     101
Amazon    150     1000    1020
Facebook  135     80      85
Google    80      75      80

我将举例说明我想要做什么。

  1. 取段 2 和 3 的体积的平均值,这样我就输出了一个表格:

    Volume (Avg)
    142.5
    
    1. 此外,我希望取这些细分中几列的平均值,例如

      Stock     Volume1 Volume2 Volume3 Volume Average
      Apple     200     100     101     133.67
      Amazon    150     1000    1020    723.33
      
                                        428.50
      
      Facebook  135     80      85      100
      Google    80      75      80      78.33
      
                                        89.165
      
                                                        258.8325
      

一般来说,我会寻找允许我在数据集中处理均值、求和、创建表和任何类型的数据操作等运算符的语法。

【问题讨论】:

  • 我刚刚在聚合函数中找到了 SQL 函数 group by,我认为这可能是一个很好的起点。

标签: sql sas sas-studio


【解决方案1】:

你的问题不是很好,所以我会尝试提出一些想法,然后我们可以讨论。

您可以向数据集添加行标识符:

data yourdata2;
set yourOriginalData;
rownum = _N_;
run;

那么您可以使用各种方法中的任何一种来计算均值:

proc sql;
create table your_summarydata as
select avg(volume) as vol_mean
from yourdata2
where rownum in (2,3);
quit;

我正在扩展您最初的想法。我不建议使用这种方法进行任何认真的计算。在现实世界中,我会编写一些分类变量,我希望计算这些变量,然后使用类似的东西:

proc sql;
create table your_summarydata as
select groupvar, avg(volume) as vol_mean
from yourdata2
where 1=1 /* where conditions go here if you want to restrict the input dataset before calculations */
group by groupvar
quit;

【讨论】:

  • 抱歉,我只是在编辑表格以更好地表达我的想法。
  • Row num 和 Col num 似乎是我正在寻找的。一般来说,我正在寻找允许我确定我正在使用的观察集群的语法,例如如果我只想使用第 2-4 行和第 3-8 列并找到这些观察值的平均值。感谢您的帮助。
  • 好的。 Afaik,SAS 不是那样工作的。 SAS 使用的数据很像 SQL 数据库:您有行(可以使用 rownum 指向),并且您有可以使用列名访问的列,而不是列号。话虽如此,有一种方法可以在数据步骤中制作多维数组,但我不是这方面的专家。如果我有时间,将不得不稍后查找文档。
  • 我查看了您的新表格。您希望在该表格中达到 428.5、89.165 和 258.8325 的平均交易量吗?如果是这样,我会向您指出我之前的答案;制作一个分类变量,您可以使用 group by 或其他一些 SAS proc 对其进行聚合。此外,还有一个 SAS IML 模块,它允许您编写常规的矩阵代数运算,但我认为它不是任何常规 SAS 设置的一部分。
【解决方案2】:

您的问题非常广泛,但这里有几个基本的相关示例供您参考:

data have;
input Stock $ Volume1 Volume2 Volume3;
cards;
Apple     200     100     101
Amazon    150     1000    1020
Facebook  135     80      85
Google    80      75      80
;
run;

data row_means;
  set have;
  volume_mean = mean(of volume1-volume3);
run;

proc summary data = have;
  var volume1-volume3;
  output out = column_means mean=;
run;

对于更高度可定制的输出,听起来您可能也对proc reportproc tabulate 感兴趣,但使用这些内容的综合指南超出了本网站的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2014-11-27
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多