修改数据集以扩展时间范围

时间:2016-03-11 13:48:43

标签: sas

很抱歉这个令人困惑的标题。

背景

数据看起来像这样

<div class="row featured-row" ng-controller="FeaturedController">
<div dir-paginate="article in featured | itemsPerPage: pageSize" current-page="currentPage">

    <div class="col-md-4 text-center" >
        <img src="{{ asset('images/1.jpg') }}" alt="image" class="img-circle">
        <h2>@{{ article.title | capitalize }}</h2>
        <p> Featured </p>
        <p> @{{ article.description }}</p>
        <p> @{{ $index }}</p>

    </div>
</div>
<div class="text-center">
    <dir-pagination-controls

            boundary-links="true"

            on-page-change="pageChangeHandler(newPageNumber)"

            template-url="{{ asset('js/dirPagination.tpl.html') }}">

    </dir-pagination-controls>
</div>

区域有几个不同的值。对于每个区域,Area Date Ind LB UB A 1mar 14 1 20 A 2mar 3 1 20 B 1mar 11 7 22 B 2mar 0 7 22 LB在多个日期都是固定的,而UB则有所不同。 Ind始终从月份开始到该月的某一天开始。

:定位

我的目标是为每个区域运行一个控制图,以查看Date是否超出范围Ind

但是,如果我只绘制每个区域的原始数据,默认情况下(LB,UB)不会在该月的最后一天结束(在上一个示例中,该图将从1月3日到3月2日而不是31-Mar。我知道通过在xaxis中指定xmax选项,情节将延伸到31-Mar。但这只会扩展xaxisxaxis并且LB仍然显示从1月3日到2月3日,图表的右侧是空的。

因此,我使用UB添加一些日期记录。

我做了什么

modify

问题

但这只适用于一个领域。我需要先修改每个区域然后逐个绘制它们。如何才能相对有效地获得低于数据

data have;
modify have;
do i = 0 to intck('day',today(),intnx('month',today(),0,'E'));
Date = today()+i;
call missing(Ind);
output;
end;
stop;
run;

proc sgplot data=have missing;
series ... Ind ...;
series ... LB ...;
series ... UB ...;
run;

Area Date Ind LB UB A 1mar 14 1 20 A 2mar 3 1 20 A 3mar . 1 20 .... A 31mar. 1 20 B 1mar 11 7 22 B 2mar 0 7 22 B 3mar . 7 22 .... B 31mar. 7 22 中有其他选项可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以将proc timeseries与分组area一起使用,将其添加到您需要的表单中。 end=选项可让您指定数据的结束日期。看起来您正在使用当前月份,因此我们将使用您的intnx函数并将其放入一组解析为日期文字的宏函数(大多数ETS过程需要日期文字)出于某种原因)。

我们将使用两个var语句:一个用于ind,其中我们用.填充未观察到的值,另一个用LB&amp; UB使用之前的有效值设置未观察到的值。

请注意,我们假设您已将date置于SAS日期。在运行以下代码之前,请确保先执行此操作。

proc timeseries data=have
                out=want;
   by area;
   id Date interval=day notsorted 
           accumulate=none
           end="%sysfunc(intnx(month, %sysfunc(today() ), 0, E), date9.)"d;
   var Ind / setmissing=missing;
   var LB UB / setmissing=previous;
run;

您的最终数据集看起来与您一样。