SAS,合并,未知代码数据集观察

时间:2018-09-04 13:43:33

标签: sas dataset

我需要帮助阅读下面的代码。我不确定这段代码中的特定部分在做什么。例如,( 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;

3 个答案:

答案 0 :(得分:0)

似乎您需要了解SAS数据步languange! 括号中发生的这一系列事情是datastep选项 引用表时,即使在proc sql中,也可以使用这些选项 您有以下选项:  firstobs:这将在您的案例2中输入的记录上开始数据馈送,这意味着SAS将在第二条记录的表上开始。

keep:这将仅使用列表中的字段,而不使用表中的所有字段 rename =重命名将重命名字段,因此它就像SQL中的别名一样

OBS =将限制您从表中拉出的记录量,例如SQL中的top或limit

DROP =会删除在您的情况下从表中选择的字段 all ,因为这表示他将删除所有字段。

关于功能:

LAG将保留您在括号中放入的字段的先前记录的值,因此DPD_CLOSE_OF_BUSINESS_DT

INF =像案件或案件一样起作用。基本上,您在第一个参数中创建一个条件,然后在第一个参数中的条件为true时应用第二个参数,如果第一个参数中的条件为false,则第三个参数完成。

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

我能给您的最好建议是开始使用SAS和您想知道其功能的函数名称,这是封装的问题!

希望这会有所帮助!

答案 1 :(得分:0)

基本上,您的数据步骤是使用LAG()函数回顾一项观察结果,并使用额外的SET语句提前一项观察结果。

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

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

为此,请注意,您需要在两个不同的SET语句中引用相同的输入数据集(最后一个数据集使用obs=1drop=_all_数据集选项时使用 并不需要完全相同,因为它不需要读取任何实际数据,只需要至少观察一次即可。

答案 2 :(得分:0)

  

(firstobs = 2 keep = DPD_CLOSE_OF_BUSINESS_DT重命名=   (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 = 10,它将开始从第10次观察中读取数据。

Obs: 如果指定obs = 15,则最多可以读取15个obs。

如果运行下表,它将在输出结果中提供3个观测值(从2nd到4th)。

示例;

Handler