sas,combine,未知代码数据集观察

问题描述 投票:0回答:3

我需要帮助阅读下面的代码。我不确定此代码中的具体部分是做什么的。例如,( firstobs = 2 keep = column3 rename = (column3 = column4) )做什么?

另外,( obs = 1 drop = _all_ );做什么?

我之前也没有使用过column5 = ifn( first.column1, (.), lag(column3) );。这是做什么的?

我在读别人的代码。我希望我能提供更多细节。如果我找到解决方案,我会发布它。谢谢你的帮助。

data out.dataset1;
set out.dataset2;
by column1;
WHERE column2 = 'N';
set out.dataset1 ( firstobs = 2 keep = column3 rename = (column3 = column4) )
    out.dataset1 ( obs = 1 drop = _all_ );
FORMAT column5 DATETIME20.;
FORMAT column4 DATETIME20.;
column5 = ifn( first.column1, (.), lag(column3) );
column4 = ifn(  last.column1, (.), column4 );
IF first.column1 then DIF=intck('dtday',column4,column3);
ELSE DIF= intck('dtday',column5,column3); 
format column6 $6.; 
IF first.column1
OR intck('dtday',column5,column3) GT 20 THEN column6= 'HARM';
ELSE column6= 'REPEAT'; 
run;
sas dataset
3个回答
0
投票

好像你需要了解SAS datastep languange!括号中发生的这一系列事件是datastep选项当您引用表时,您可以使用这些选项,即使在proc sql中您拥有的选项:firstobs:这将启动记录中的数据馈送输入您的案例2它意味着SAS将在第二条记录中开始。

keep:这将只使用列表中的字段而不是使用表中的所有字段rename = rename将重命名字段,因此它的工作方式类似于SQL中的别名

OBS =将限制您从SQL中的顶部或限制中提取的记录数量

DROP =将删除从您的案例中选择的字段全部使用,这意味着他将丢弃所有字段。

至于功能:

LAG保留了您在括号中放置的字段的前一记录的值,因此DPD_CLOSE_OF_BUSINESS_DT

INF =像案件一样工作或如果。基本上你在第一个参数中创建一个条件,然后当第一个参数中的条件为真时应用第二个参数,第三个参数在第一个参数的条件为假的情况下完成。

因此,如果它是变量SOR_LEASE_NBR的第一个记录,则回答该问题,那么字段Prev_COB_DT将是。否则它将是DPD_CLOSE_OF_BUSINESS_DT的先前值。

我能给你的最好的建议是开始谷歌搜索SAS和功能名称你想知道它做什么,然后这是一个封装的问题!

希望这可以帮助!


0
投票

基本上你的数据步骤是使用LAG()函数回顾一个观察和额外的SET语句以向前看一个观察。

然后使用IFN()函数调用来确保在组边界处分配缺失值。

然后使用这些计算的PREV和NEXT日期来计算DIF变量。

注意这个工作你需要在两个不同的SET语句中引用相同的输入数据集(最后使用obs=1drop=_all_数据集选项的数据集实际上不需要相同,因为它不读取任何实际数据,它只需至少有一个观察)。


0
投票

(firstobs = 2 keep = DPD_CLOSE_OF_BUSINESS_DT rename =(DPD_CLOSE_OF_BUSINESS_DT = Next_COB_DT))吗?

这里的代码firstobs = 2表示SAS从数据集中的第二次观察中读取数据。并且还通过使用重命名选项尝试更改变量的名称。

(obs = 1 drop = _all_);

obs = 1仅读取数据集中的第一个obs。如果指定obs = 2,则将读取最多2个obs。

drop = _all_,正在删除所有变量。

Firstobs:可以读取部分数据。如果指定Firstobs = 10,它将开始从第10次观察中读取数据。

Obs:如果指定obs = 15,则最多15个ob,数据将被加入。

如果运行下表,它会在输出结果中给出3个观测值(从第2到第4个)。

例;

DATA INSURANCE;
INFILE CARDS FIRSTOBS=2 OBS=4;
INPUT NAME$ GENDER$ AGE INSURANCE $;
CARDS;
SOWMYA  FEMALE  20  MEDICAL
SUNDAR  MALE    25  MEDICAL
DIANA   FEMALE  67  MEDICARE
NINA    FEMALE  56  MEDICAL
RUN;
© www.soinside.com 2019 - 2024. All rights reserved.