我必须计算时间= 0处的第一个日期与之后的日期之间的日期差。我也有一个变量=因数,它有2类:一种;二。
例如,这是一个日期:
A B TIME
10/11/2016 one T0
17/11/2016 two T0
05/01/2017 one T1
28/02/2017 two T1
06/07/2017 one T2
05/09/2017 two T2
我想计算T0与B =“ one”和B =“ two”的日期之间的差,以获得:
DIFF
0
0
56
103
238
292
计算差异如下:
56 = T1-T0 for "one" = 05/01/2017 - 10/11/2016
103 = T1-T0 for "two" = 28/02/2017 - 17/11/2016
238 = T2-T0 for "one" = 06/07/2017 - 10/11/2016
292 = T2-T0 for "two" = 05/07/2017 - 17/11/2016
您能帮我在SAS中做到吗?
非常感谢。
答案 0 :(得分:3)
一种方法是提取TIME ='T0'记录,然后将其与其他记录合并。
首先让我们将表转换为数据集。
data have ;
input b $ Time $ date :yymmdd.;
format date yymmdd10.;
cards;
one T0 2016-11-10
two T0 2016-11-17
one T1 2017-01-05
two T1 2017-02-28
one T2 2017-07-06
two T2 2017-09-05
;
现在让我们对其重新排序,以便我们可以通过分组变量B
进行合并。
proc sort ;
by b time ;
run;
这是一种将数据与其自身合并的方法。
data want ;
merge have(where=(time ne 'T0'))
have(keep=time b date rename=(time=time0 date=date0) where=(time0='T0'))
;
by b ;
diff = date - date0;
drop time0;
run;
结果:
Obs b Time date date0 diff
1 one T1 2017-01-05 2016-11-10 56
2 one T2 2017-07-06 2016-11-10 238
3 two T1 2017-02-28 2016-11-17 103
4 two T2 2017-09-05 2016-11-17 292
答案 1 :(得分:1)
当然有几种方法可以做到这一点。以下是两种选择。第一个为每个B选择第一个A,然后在SQL步骤中将其与原始数据合并。第二个使用DATA步骤和按组。每个B中的第一个A被保存为第一次,并保留下来,以便可以用来计算差异。
"dependencies": {
"babel-plugin-transform-remove-console": "^6.9.4",
"formik": "^1.5.4",
"lodash": "^4.17.11",
"moment": "^2.24.0",
"moment-timezone": "^0.5.25",
"native-base": "^2.12.1",
"react": "16.8.6",
"react-native": "0.59.8"
....
}
"devDependencies": {
"babel-jest": "24.8.0",
"babel-preset-react-native": "4.0.1",
"jest": "24.8.0",
"react-test-renderer": "16.8.6",
"run-script-os": "~1.0.5"
},