我有一个索赔数据集,我想将其分割为TXT文件。主要问题是,单个TXT文件只能包含两个声明(应写出所有出现的声明),下一个声明应写入另一个txt或数据集,即,如果我在文件中有10个声明,则我应该有5个声明文件/数据集作为输出。
我的数据看起来像这样:
Obs Tin Claim_Id
1 271408630 EDY03JHKK00
2 271408630 EDY03JHKK01
3 271408630 EDY03JHKK01
4 271408630 EDY03JHKK01
5 271408630 EDY03JHKK01
6 271408630 EDY03JHKK01
7 271408630 EDY03JHKK01
8 271408630 EDY03JHKK01
9 271408630 EDY03JHKK01
10 271408630 EDY03JHKK01
11 271408630 EDY03JHKK01
12 271408630 EDY03JHKK01
13 271408630 EDY03JHKK01
14 271408630 EK359VRPM00
15 271408630 EK359VRPM00
16 271408630 EK359VRPM00
17 271408630 EK359VRPM00
18 271408630 EK359VRPM00
19 271408630 EK359VRPM00
20 271408630 EK359VRPM00
21 271408630 EK359VRPM00
22 271408630 EK359VRPM00
23 271408630 EK359VRPM00
24 271408630 EK359VRPM00
25 271408630 EK359VRPM00
26 271408630 EK359VRPM00
27 271408630 EK359VRPM01
28 271408630 EK359VRPM01
29 271408630 EK359VRPM01
30 271408630 EK359VRPM01
31 271408630 EK359VRPM01
32 271408630 EK359VRPM01
在基本SAS中尝试
使用FILE
语句FILEVAR=
选项在运行数据步骤期间更改输出文件。
[假定数据集已按Claim_Id
进行了预排序,或者在Tin
内对Claim_Id
进行了排序。 BY
处理可以计算遇到的组数,并每2个组更改文件名。如果每个文本文件中的声明数是3(或其他一些#)而不是2,请调整文件名结构中的模数测试和除数。
data have;
do tin = 1 to 20;
do claimid = 1 to 9;
do item = 1 to ceil(20 * ranuni(123));
value = 100 + floor(50*ranuni(123));
output;
end;
end;
end;
run;
data _null_;
set have;
by tin claimid;
if first.claimid then do;
retain claimgroup 1;
claimgroup+1;
if mod(claimgroup,2) = 0 then filename = cats('c:\temp\claims_pair#', claimgroup/2);
end;
file pairs filevar=filename dlm=',';
put tin claimid item value;
run;