SAS宏在数据中缺少日期的一系列日期之间求平均值

SAS宏在数据中缺少日期的一系列日期之间求平均值,sas,Sas,我对SAS及其宏完全陌生。我有一个名为mydata的数据集: Obs SYMBOL DATE kx y 1 A 20120128 5 6 2 B 20120128 10 7 3 C 20120128 20 9 4 D 20120128 6 10 5 E 20120128 9 20 我的问题是找到这个函数: Newi = ∑ j€[-10,-2] (x+y)i,j /N, 在哪里, i = an

我对SAS及其宏完全陌生。我有一个名为mydata的数据集:

Obs SYMBOL  DATE    kx  y
1   A   20120128    5   6
2   B   20120128    10  7
3   C   20120128    20  9
4   D   20120128    6   10
5   E   20120128    9   20
我的问题是找到这个函数:

Newi = ∑ j€[-10,-2]  (x+y)i,j /N, 
在哪里,

i = any random date(user defined)

-10 and -2(10 days or 2 days before i)

N= total number of days with data available for (x+y) between (-10,-2)
可用数据中可能缺少日期

有人能帮我解决以下问题的SAS宏吗


提前谢谢

我假设您的日期数据存储为日期,并且可以接受数字计算。我还假设你想要得到关于d的特定日期的X和Y的平均值,其中d是用户定义的。最后,我假设如果您在同一天有两个唯一的ID,那么您将随机保留第一个ID。显然,这些假设可能需要稍加调整,但是,从我相信你的提问来看,我承认我几乎肯定我理解了你的问题,希望这与你需要的足够接近,你可以很容易地调整其余的

好的

 PROC SORT DATA in;
 BY date uniqueid;
 RUN;

%MACRO summarize( userdate );

DATA out;
SET in (where = (date >= &userdate -10 and date <= &userdate - 2);
BY date uniqueid;
xy = sum(x, y)
IF first.uniqueid;
RUN;

PROC SUMMARY DATA = out; 
OUTPUT OUT = Averages&userdate MEAN(xy) = ;
RUN;
%MEND summarize;

%summarize('20120128'd); 
这是怎么回事?我先按日期和唯一性对数据进行排序。我可以使用NODUPKEY,但我想您可能想要控制如何处理给定日期上的重复uniqueid。数据集通过保留遇到的第一个DUP来抛出DUP,但您可以修改重复数据消除逻辑,该逻辑来自数据步骤中的by命令和IF first命令。以同样的方式指挥

您需要一组围绕特定用户定义日期d的日期。因此,获取d并使用WHERE过滤数据集。您也可以在PROC SORT步骤中执行此操作,如果您的原始数据将经常更新,则可能有这样做的原因。如果不需要每次用户定义日期范围时都运行排序,请将其保留在宏之外,并仅在需要时运行排序。排序可能很慢

在数据步骤中,我让sumx,y来解释x或y可能缺失,或者两者都缺失,或者两者都缺失。在这些情况下,x+y将返回缺失。我假设这就是你们想要的,但请记住,我们将求出sumx,y除以N的平均值,其中N要么是x,要么是y。如果要完全忽略这些行,请使用x+y并添加If xy!=。在您的数据步骤中

最后一部分,总结,应该是不言自明的


希望这有帮助

你的函数定义不是很清楚。请你发布一些有用的例子好吗?我想你的意思是,对于任何给定的日期,你都需要该日期前10到2天的x+y的平均值,忽略缺少日期的行。是否要为mydata中的每个日期创建一个具有函数值的数据集?只需添加,我还有一个具有唯一id的列。此唯一id对于不同日期可以相同,但对于单个日期不能出现两次。我想要的是这个唯一id列10到2天的x+y平均值。是的,我想为我在mydata中指定的每个日期创建一个具有函数值的数据集。谢谢