1

以下を使用して、SAS から Excel へのデータセットのエクスポートを自動化していますODS ExcelXP

       PURCHASE_    annual_      Minimum_
Obs       APR         fee      Cash_Advance
  1     23.45%       NONE          $10
  2     23.45%       NONE          $10
  3     23.45%       NONE          $10
  4     18.45%       NONE          $10
  5     18.45%       NONE          $10
  6     18.45%       NONE          $10
  7     23.45%       NONE          $10
  8     23.45%       NONE          $10
  9     23.45%       NONE          $10
 10     23.45%       $0
 11     23.45%       $0
 12     23.45%       $0

SAS では、列はテキストとしてフォーマットされており、すべての列をテキストとして Excel にインポートしたいと考えています。次のコードを使用して、を使用してファイルを作成しましたPROC REPORT

ods tagsets.ExcelXP path="H:/path"  file="file.xls" style=myStyle
                    options(frozen_headers='yes' WrapText='no'
                            embedded_titles='yes' suppress_bylines='yes'
                            sheet_interval='none' sheet_label=' ' 
                            sheet_name='Solicited'
                            width_points='1' width_fudge='1' 
                            absolute_column_width='100' autofit_height='yes' 
                            zoom='100');
title1;

proc report data=testing2 nowd;
  column purchase_APR annual_fee minimum_cash_advance;
  define purchase_APR / display style(column)={tagattr='format:@'} 'PURCHASE_APR';
  define annual_fee / display style(column)={tagattr='format:@'} 'ANNUAL_FEE';
  define minimum_cash_advance / display style(column)={tagattr='format:@'} 'MINIMUM_CASH_ADVANCE';
run;

ods tagsets.ExcelXP close;

ただし、Excel ファイルを開くと、テキスト フィールドが 、 、および (テキスト) から 、 、および (テキスト) にそれぞれ変更23.45%$0$100.23450ます10

Excel の出力を SAS のデータセットと同じようにするにはどうすればよいですか?

特定の形式を使用して同じように見えるようにしようとしましたが (例:tagattr='format:0.00%'など)、Excel の出力は数値であり、テキスト形式ではありません。

4

2 に答える 2

2

適切な方法は、テンプレートが数値を処理する方法を変更することです。この場合、非常に簡単に行うことができます。1行と1ブロックのコードをコメントアウトすることもできますが、これが本当に適切な答えです.

テンプレートをテキスト エディターで開きます。いくつかのパラメーターを追加して実装します。

まず、オプションを $valid_options 配列に追加します。このような行がたくさんあります。次の 2 つを追加します (635 行目あたり)。

set $valid_options["TEXTPERCENT"] "This value forces percentages to be displayed as text";
set $valid_options["TEXTCURRENCY"] "This value forces currency amounts to be displayed as text";

そのテキストはあなたが望むものであれば何でもかまいません。これは 1 つの解釈です。ここで、700 行あたりにデフォルトを設定する行がいくつかあります。次の 2 つを追加します。

set $option_defaults["TEXTCURRENCY"] 'no';
set $option_defaults["TEXTPERCENT"] 'no';

ずっと後 (行 1670 あたり) に、$punctuation を定義するセクションがあります。これらのオプションを設定した場合、リストから「%」と「$」を削除するために、その動作方法を変更します。

set $punctuation $thousands_separator " ";
set $punctuation $punctuation "%" /if ^$textpct;
set $punctuation $punctuation $currency_sym /if ^$textcurr;

(基本的に、 $variable /if を設定します。句読点を $thousands_separator で開始するように設定し、「いいえ」のみの場合は他のビットを追加します。)

"Yes/no on/off options..." セクションの 2100 行あたりで、オプションの値を評価します。(事前定義ではこれらの値を使用しますが、問題ありません。実際には後で呼び出されます。)

set $option_key 'TEXTPERCENT';
trigger do_yes_no;
eval $textpct $answer;

set $option_key 'TEXTCURRENCY';
trigger do_yes_no;
eval $textcurr $answer;

最後に、実装します。7400 行あたりevent value_type;で % $ が削除され、実際の数値であってはならない場合でも数値が「実数」になるように調整されます。これは面倒です。だから私たちはそうしないように言います。

do /if ^$textpct;
 do /if $convert_percentages;
   eval $tmp inputn($value, $test_format)/100;
 else;
   eval $tmp inputn($value, $test_format);
 done;
 /*putlog "Percent value:" $tmp;*/
 set $value $tmp;
done;

パーセント変換コードをdo /if ^$textpct;anddoneでラップします。これにより、inputn をスキップするように指示されます (これにより、パーセントが殺されます)。不正行為を行っていて、これを適切な方法で行っていない場合は、次の行をコメントアウトできます。

set $value compress($value, $punctuation);

しかし、$punctuation 変数を正しいものを含む (または含まない!) ように修正したので、これは問題ではありません。

これでうまくいきます!tagset 呼び出しを変更するだけです。

*First include your tagset, which I put in c:\temp\ but you can put wherever and call whatever you like;
%include "c:\temp\excel_tpl_nocompress.txt";
 ods tagsets.ExcelXP path="c:\temp\"  file="testfile.xml" 
                    options(frozen_headers='yes' WrapText='no'
                            embedded_titles='yes' suppress_bylines='yes'
                            sheet_interval='none' sheet_label=' ' 
                            sheet_name='Solicited' convert_percentages="no"
                            width_points='1' width_fudge='1' 
                            absolute_column_width='100' autofit_height='yes' 
                            textcurrency='yes' textpercent='yes'
                            zoom='100');
title1;
*Then add in the textpercent and textcurrency lines, and it should work as is.;

そして今、あなたはレースに出かけています。

- <Row ss:AutoFitHeight="1">
- <Cell ss:StyleID="data__l1" ss:Index="1">   <Data ss:Type="String">23.45%</Data>    </Cell>
- <Cell ss:StyleID="data__c1" ss:Index="2">   <Data ss:Type="String" />    </Cell>
- <Cell ss:StyleID="data__l1" ss:Index="3">   <Data ss:Type="String">$0</Data>    </Cell>   
</Row>
于 2013-08-06T23:54:45.297 に答える
1

必要な答えを見つけました。次のページで ExcelXP オプションを見つけtagsets.ExcelXPまし た。パーセンテージのピリオドの代わりにドル記号とパイプ。そのように出くわしたとき、またはこれらを純粋なテキストとして扱いました。currency_symbol = "|"decimal_separator = "|"$023.45%

于 2013-08-07T16:47:03.127 に答える