我正在尝试使用存储在外部文件中的一些变量来编写文件。我在使用line holder(@@ with put语句)和循环时遇到了麻烦。我喜欢把变量放在文件的某些地方,但是我得到的resut文件由这些变量的每一行重复。我只是希望这些变量一次作为一个块放置。
这是我写的代码:
data _null_;
set merged;
file 'c:outfile.txt';
put @1 "A" @4 &totaln.;
do i=1 to &totaln;
put @1 i @4 "L3 2 DW 1.7" @17 a @28 b @40 c @@;
end;
put;
put @1 "OL" @4 &totaln.;
do j=1 to &totaln.;
put @1 j put @4 "L3 2 DW 1.7" put @17 av @28 bv @40 cv @@;
end;
put;
put @1 "CI &totaln. AO";
put @1 "OP";
put @1 "KO" @4 "SL";
run;
&安培; totaln。是我制作的合并文件中的总计数。 '合并'包含a,b,c,av,ab,ac变量(它们的行大约是19个)。所以我想要19行a,b,c变量低于NE totaln line。然后对于av,bv,cv下面的OL totaln行,然后在outfile的末尾有三行CI OP和Ko行。
合并:
A B C av bv ac cnt
0.0268 676.9155 0.0347 0.9620294118 -2.131070959 0.031533299 1
0.0215 704.6740 0.2240 0.7738647059 -1.185638164 0.3506849035 2
0.0430 736.3752 0.2053 1.5611941176 -0.442240668 0.2434476134 3
0.0223 727.6945 0.1752 0.8075882353 -0.833957317 0.1725987826 4
0.0220 715.3714 0.1187 0.7434058824 -0.991003252 0.120438949 5
0.0287 754.1052 0.1824 0.8567470588 0.126161198 0.1685302022 6
outfille look:
NE 6
1 L3 2 DW 1.7 0.0268 676.9155 0.0347
2 L3 2 DW 1.7 0.0215 704.6740 0.2240
3 L3 2 DW 1.7 0.0430 736.3752 0.2053
4 L3 2 DW 1.7 0.0223 727.6945 0.1752
5 L3 2 DW 1.7 0.0220 715.3714 0.1187
6 L3 2 DW 1.7 0.0287 754.1052 0.1824
OL 6
1 L3 2 DW 1.7 0.9620294118 -2.131070959 0.031533299
2 L3 2 DW 1.7 0.7738647059 -1.185638164 0.3506849035
3 L3 2 DW 1.7 1.5611941176 -0.442240668 0.2434476134
4 L3 2 DW 1.7 0.8075882353 -0.833957317 0.1725987826
5 L3 2 DW 1.7 0.7434058824 -0.991003252 0.120438949
6 L3 2 DW 1.7 0.8567470588 0.126161198 0.1685302022
CI 6 AO
OP
KO SL
答案 0 :(得分:1)
为了将数据集拆分为中间(基本上)并将左边的3个变量放在输出文件中的右3个变量之上......需要2个数据步骤。我将变量分成2个数据集。使用前3个变量创建输出文件后,可以使用FILE语句中的MOD选项再次写入。您可能需要调整一些Put @位置以使变量与列对齐。此外,在此示例中,似乎“L3 2 DW 1.7”是常量,将其放在宏变量中,以便它只需要在一个位置进行更改。
试试这个:
proc sql;
select count(*) into:totaln
from merged;
quit;
data merged1(keep=cnt a b c) merged2(keep=cnt av bv ac);
input A B C av bv ac cnt;
datalines;
0.0268 676.9155 0.0347 0.9620294118 -2.131070959 0.031533299 1
0.0215 704.6740 0.2240 0.7738647059 -1.185638164 0.3506849035 2
0.0430 736.3752 0.2053 1.5611941176 -0.442240668 0.2434476134 3
0.0223 727.6945 0.1752 0.8075882353 -0.833957317 0.1725987826 4
0.0220 715.3714 0.1187 0.7434058824 -0.991003252 0.120438949 5
0.0287 754.1052 0.1824 0.8567470588 0.126161198 0.1685302022 6
;
run;
data _null_;
set merged1;
file "C:\outfile.txt";
if _n_=1 then put @1 "NE" @4 "&totaln";
put @1 cnt @4 "L3 2 DW 1.7" @17 a @28 b @40 c;
run;
data _null_;
set merged2 end=last;
file "C:\outfile.txt" mod;
if _n_=1 then put @1 "OL" @4 "&totaln";
put @1 cnt put @4 "L3 2 DW 1.7" put @17 av @28 bv @40 ac;
if last then do;
put @1 "CI &totaln. AO";
put @1 "OP";
put @1 "KO" @4 "SL";
end;
run;