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