2012-03-22 10 views
0

外部ファイルに格納された変数を使用してファイルを書き込もうとしています。私はラインホルダー(@@文をput文)とループを使って問題があります。私はファイル内のいくつかの場所に変数を置くのが好きですが、私はそれらの変数の各行でリビットを繰り返しています。私はちょうどそれらの変数を一度にチャンクとして配置したい。変数を使用して行を保持してループを使用するSAS書き込みファイル

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:ここ

は、私が書いたコードです。私が作成したマージされたファイルの総数です。 'Merged'にはa、b、c、av、ab、ac変数が含まれています(その行は約19個です)。だから私は、NEのtotaln行未満のa、b、c変数の19行が必要です。次に、OLの下のav、bv、cvの場合と同じことが行われ、outfileの最後にCIのOPとKo行の3行が表示されます。

がマージ:

ABCのAV BV交流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.0287754.1052 0.1824 0.8567470 588 0.126161198 0.1685302022 6

outfilleルック:
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

はこれを試してみてください。また、各PUTステートメントにはセミコロンが必要です... DO-ENDには、同じ行にいくつかのputステートメントがあります。私は、誰かが成功したサンプルを見ることなくこの問題を解決できるのではないかと疑います。入力データとその表示方法を投稿します。 –

+0

のデータは次のようにマージされます。 – user634455

答えて

1

(本質的に)中央を上下セットデータを分割し、3つの変数右3 VA上方左側を置くためにあなたは2データステップが必要です。変数を2つのデータセットに分割しました。最初の3つの変数を使用して出力ファイルを作成すると、FILEステートメントのMODオプションを使用して再度書き込むことができます。変数を列に整列させるためには、Put @位置のいくつかを調整する必要があります。また、この例では、 "L3 2 DW 1.7"は定数であるように見えます。その変数をマクロ変数に入れて、1つの場所で変更するだけです。あなたはMERGEDからデータをポストする必要が

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; 
+0

10億米ドルのCarolinaJay!それは美しく働いた。そして、あなたのものに加えて、letマクロステートメントを使うのではなく、 "merged"でproc sqlを使ってマクロ変数としてtotalnを作成しました。どうもありがとうございます !! – user634455

+0

しかし、現在はtotalnマクロ変数を使用していません。 doe sitは総nカウントを使用するように%statmentだけでなければなりませんか? – user634455

+0

いいえ、確かにSQLを使用してマクロ変数を作成できます。あなたの質問にあなたのSQLコードを投稿してください。 –

関連する問題