2017-02-10 10 views
0

ここで自己学習したSASユーザー。入力中にSASの名前を変更する変数

多くの場合、私はほとんど制御できず、いくつかの異なるユーザー間で共有されているデータセットを扱います。

私は一般にinfile文+ informat、format、およびinput文のブロックで変数を定義するCSVとしてファイルを読み込んでいます。このプロセスでは、すべての変数が正しい順序で名前が変更されていれば、変数名を変更することができますか?それとも、元のデータセットと一致させ、後のデータステップで名前を変更する必要がありますか?

たとえば、データセットの変数名は「100%完全に支払われました。」です。

infile statement... 
informat Paid $3.; 
format Paid $3.; 
input Paid $; 
run; 

それとも、私は非常に非効率的にこのことについてつもりです:私は、SAS変数が数字で始めることはできませんし、私はまた、一般的に変数名を簡素化したいと思いますので、私は、次のような何かを行うことができます知っています。私はこの全体のインフォーメット/フォーマット/入力ビジネスを使わずに簡単なprocのインポートを試みましたが、後で変数型を再定義しようとすると、私の頭痛の原因になります(私が扱うすべてのデータセットは、パーセント、一般的な数字、日付...)。いずれにしても、他のヒントは高く評価されています - ありがとう!

EDIT

は、たぶん私は尋ねるべき質問はこれです:(文字にこれらを変換するように思われ、procの輸入を通じて)ドルおよびパーセント用のCSVのフォーマットを維持する方法はありますか?私はファイルをインポートする前にExcelで手動でフォーマットをドル/パーセンテージから「一般」に変更できることを知っていますが、私は実際にドルとパーセンテージとしてこれらの値を保持したいので追加の手作業を避けたいと思います。あるいは、informat/format/inputを使ってcsvのデータ型を指定するほうがよいので、変数を正確にどのように読み込みたいのですか?

注:私は64ビットコンピュータを使用しているか、または必要なドライバがない(またはその両方)ため、xlsまたはxlsxファイルをインポートできませんでした。 32ビットコンピュータでもこれを行うことはできませんでした。

+0

すばやく返信いただきありがとうございます。私は完全に理解しているかどうかはわかりませんが、私は最初の質問を修正するつもりです。 – jh1021

+0

私はトムの答えがまだ当てはまると思います。たぶんあなたがCSV(プログラムではないテキストの絵として)を与えることができれば、いくつかのレコードで十分であり、例を読むのに必要な正確なコードをあなたが示すことができ、CSVにそれを推論することができます。 –

+0

いいえ、同じ精度を与えるより速い方法はありません。マニュアルコントロールが最適です。あなたがこれを頻繁に処理するなら、フォーマット/情報、タイプ、長さ、名前を指定してExcelやCSVで作成し、仕様を使用するためのマクロを作成することができます。ファイルを使用してデータをインポートします。 – Reeza

答えて

2

CSVファイルには、変数タイプに関するメタデータが含まれていません.Excelにインポートしようとすると、そのメモが表示されます。 PROC IMPORTを使用して、SASの読み方を推測させることができますが、表示される特定のデータ値に基づいて答えがファイルごとに異なる可能性があります。

XLSファイルまたはXLSXファイルにデータがある場合は、XLSまたはXLSXエンジンでlibnameを使用してSASに直接読み取ることができます。これはExcelを使用しないため、32と64のインストールの間に矛盾はありません。実際にはExcelをインストールする必要はありません。 SASはCSVファイルよりもExcelファイルから変数タイプを判断する優れた作業を行いますが、Excelは自由形式のスプレッドシートであるため、複数のファイルにわたって同じ変数に対して一貫した変数タイプがない可能性があります。 Excelスプレッドシートでは、1つのシートの1つの列に一貫して同じデータ型がない場合もあります。

ファイルを読むには、独自のデータステップを作成する方がよいでしょう。そうすれば、一貫性を保つことができます。

CSVファイルが与えられたときに私が通常行うことは、最初の行の名前をコピーしてLENGTHというステートメントを作成することです。これは、変数を定義し、変数の順序を設定します。この時点で変数に新しい名前を付けることができます。

私は INFORMAT文を追加し、適切に読み取られるINFORMATが必要な変数について次に
length paid $3 date amount 8 ; 

。通常、これは日付/時刻変数にのみ必要ですが、数値にカンマやパーセント記号が含まれている場合にも必要になる場合があります。 DOLLAR.インフォーメイトは、CSVファイルに$および/または千単位の区切り文字でフォーマットされた数字がある場合に便利です。

informat date mmddyy. amount dollar. ; 

はその後正しく表示されるようにFORMATを必要とする変数に対して私は FORMATステートメントを追加します。通常、これは日付/時刻変数にのみ必要です。 $ CHARを付ける場合は、文字変数にのみ必要です。フォーマットを使用して先頭のスペースを保持します。

format date yymmdd10. ; 

次に、位置可変リストを使用できるので、INPUTステートメントは非常に簡単です。タイプがLENGTHステートメントで既に定義されているので、INPUTステートメントにインフォーメットまたは$を含める必要はありません。

input paid -- amount ; 
関連する問題