サーチ…
前書き
インフォーマットとフォーマットは、SASにそれぞれデータの読み書き方法を伝えるために使用されます。インフォーマットは、外部ファイルからデータを読み取るときにデータストアで一般的に使用されます。インフォーマットは、PROCではめったに使用されません。フォーマットは、データステップとPROCの両方で一般的に使用されます。
備考
SASフォーマットは、数値または文字値を文字値に変換します。フォーマットは、値の表示方法を変更するformat
またはput
ステートメントを使用して適用することも、 put
関数を使用してフォーマット済みの値を新しい変数に格納することもできます。
形式には4つのカテゴリがあります。
- 文字 - 文字変数から文字データ値を書き込むようにSASに指示します。
- 日付と時刻 - 日付、時刻、および日付時刻を表す変数からデータ値を書き込むようSASに指示します。
- ISO 8601 - SASに、ISO 8601標準を使用して日付、時刻、および日時の値を書き込むよう指示します。
- 数値 - 数値変数から数値データ値を書き込むようにSASに指示します。
形式は通常、 <formatname><w>.<d>;
形式<formatname><w>.<d>;
形式をとり<formatname><w>.<d>;
w
は幅(任意の小数点を含む)であり、 d
は小数点以下の桁数である。
一般的な日付形式(SASの日付値に適用):
-
date9.
例:02AUG2016 -
ddmmyyn8.
例:02082016 -
ddmmyy8.
例えば02/08/16 -
yymmdd10.
例:20160802 -
year4.
例えば2016
一般的な数値形式(数値に適用):
-
comma11.0
例1234567 -
comma12.2
例えば1,234,567.00 - ドル
dollar11.2
例えばdollar11.2
ドル -
nlmnlgbp11.2
たとえば£2,468.02
その他のフォーマット:
-
$hex8.
、文字列を16進数に変換する -
$upcase.
、文字列を大文字に変換する -
$quote.
文字列を引用符で囲みます
形式の完全なリストは、こちらをご覧ください > https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001263753.htm
formatステートメントの使用
format
文は、指定された書式を指定された変数に表示目的でのみ適用します。つまり、元の値は変更されません。
data example1 ; Date = '02AUG2016'd ; /* stored as a SAS date, i.e. a number */ Date2 = '31AUG2016'd ; format Date monyy7. Date2 yymmddn8. ; run ;
日付 | Date2 |
---|---|
AUG2016 | 20160831 |
フォーマット文を使用したデータのグループ化
プロシージャ内でフォーマットを適用することができます。たとえば、 proc summary
またはproc freq
内のグループを変更することができます。
SASの日付のグループ化
data example2 ; do Date = '01JUN2016'dt to '31AUG2016'dt ; Days = 1 ; output ; end ; run ; /* Summarise by year & month */ proc summary data=example2 nway ; class Date ; var Days ; output out=example2_sum (drop=_TYPE_ _FREQ_) sum= ; format Date yymmn6. ; /* e.g. 201606 */ run ;
日付 | 日々 |
---|---|
201606 | 30 |
201607 | 31 |
201608 | 31 |
/* Summarise by month & year */ proc summary data=example2 nway ; class Date ; var Days ; output out=example2_sum2 (drop=_TYPE_ _FREQ_) sum= ; format Date monyy7. ; /* e.g. JUN2016 */ run ;
日付 | 日々 |
---|---|
JUN2016 | 30 |
JUL2016 | 31 |
AUG2016 | 31 |
フォーマットを使用する利点は、自然な並べ替え順序が保持されることです。
たとえば、 sashelp.class
を使用して、各名前の最初の文字の頻度を比較するとします。 substr()
関数を使用して最初の文字を探し、新しい変数に対してproc freq
を実行することができます。また、 $1.
適用することもできます$1.
形式をName
変数にName
ます。
proc freq data=sashelp.class ; table Name ; format Name $1. ; run ;
名 | カウント |
---|---|
A | 7 |
B | 4 |
C | 2 |
等 |
カスタムフォーマット
ユーザー定義フォーマットとも呼ばれるカスタムフォーマットは、他のデフォルトフォーマットと同様に作成して使用できます。
/*Create new character format for state variables*/
PROC FORMAT;
VALUE $statef 'CA' = 'California'
'MA' = 'Massachusetts'
'NY' = 'New York';
/*Once created, you can use your custom format in PROC and DATA steps*/
PROC PRINT DATA=table;
FORMAT state-var $statef.;
RUN;
変数state-var
は、新しい書式に従って印刷されます。たとえば、値'CA'
は'California'
として出力されます。値が'CT'
ようにフォーマットされていない場合、その値はデータセットに現れるように印刷されます。
インフォーマットを使用したデータの読み取り
Informatsは、データを読み込むこととして識別されているかSASを伝えるために使用されているinformat
声明。
data test;
infile test.csv;
informat id $6.
date mmddyy10.
cost comma10.2
;
input @1 id
@7 date
@20 cost
;
run;
Informatsと書式を一緒に使用して、データを読み込み、以下の給与変数などの異なる形式で書き出すこともできます。
DATA workers;
informat first last $16.;
informat salary 12.1;
informat birthdate 8.;
input
first $
last $
birthdate
salary;
format salary dollar10.;
datalines;
John Smith 19810505 54998.5
Jane Doe 19950925 45884.5
Frank James 19600222 70000.5
Jamie Love 19630530 292000.5
;
run;