問題タブ [sas-macro]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sas - SASでIFまたは%IFを使用する場合
私はSASを初めて使用し、単純なIf-Then-elseをいつ使用すべきか、%IF-%THEN-%ELSEをいつ使用すべきかを判断するのに苦労しています。以下のサンプルコードとして:
最初の行(ヘッダー)を取得し、パラメーターfdateを取得しようとしています。このパラメーターの値に基づいて、後続の入力行を異なる方法で解析しています。ただし、2番目の入力部分のみが実行されるため(常に出力でパラメーター'rectype'を取得するため)、これは機能しないようです。
私が間違っているかもしれないこととして何か提案はありますか?
sas - SAS - マクロ変数からの変数の作成
20 個の文字変数を持つ SAS データセットがあり、そのすべてが名前です (例: Adam、Bob、Cathy など)。
Adam_ref、Bob_ref などと呼ばれる変数を作成する動的コードが必要です。これは、異なる名前の異なるデータセットがある場合でも機能します (つまり、各変数を手動で定義したくない)。
これまでの私のアプローチは、proc コンテンツを使用してすべての変数名を取得し、マクロを使用してマクロ変数 Adam_ref、Bob_ref などを作成することでした。
ここからデータセット内に実際の変数を作成するにはどうすればよいですか? 別のアプローチが必要ですか?
sas - SAS 9.3 に相当する「for in」ループ
SAS 9.3 マクロ言語のfor inループ( Pythonや R など) に相当するものをしばらく探しています。DO ループは解決策のようですが、私が望むとおりには機能しませんでした。DO ループを使用してデータ ステップでそれを行う方法を確立しましたが、マクロ言語では機能しません。たとえば、データ ステップでは、次のコードが機能しています。
そして、期待どおりのログプロンプト:
マクロの%DOループで同じことをしようとすると、エラーが発生します。
ログには次のメッセージが表示されます。
私は SAS と stackoverflow にまったく慣れていないので、私の質問があまりにもばかげていないことを願っています。Python と R でこれを行うのは非常に簡単ですが、SAS で行うには簡単な方法が必要です。
助けてくれてありがとう - J. Muller
sas - SAS データセットからサブデータを抽出し、別のデータセットに適用する
proc univariate
データセット内の変数のカスタム変位値を計算するために使用するマクロを作成しました (たとえばdsn1
) %cust_quants(dsn= , varlist= , quant_list= )
。dsn2
出力は、次のような要約データセット (たとえば) です。
私がやりたいことは、要約データセットを使用して、元のデータセットの極端な値を上限/下限にすることです。私の考えは、対象の列を抽出し (たとえばq_99
)、それをマクロ変数のベクトル (たとえば ) に入れることq_99_1, q_99_2, ..., q_99_n
です。次に、次のようなことができます。
ではR
、これを行うのは非常に簡単です。インデックスのようなマトリックスを使用してデータフレームからサブデータを抽出し、このサブデータをオブジェクトに割り当てることができます。この 2 番目のオブジェクトは、後で参照できます。例 - data-frame からのR
抽出:b
a
SASで同じことをすることは可能ですか? サブデータの列をマクロ変数/配列に割り当てて、2 番目のデータ ステップ内でマクロ/配列を使用できるようにしたいと考えています。1つの考えはproc sql into:
次のとおりです。
ただし、実際に必要なのは変数のベクトル (または配列 - SAS ではベクトルではない) である場合、これは単一の文字列変数を作成します。もう1つの考えは、追加すること%scan
です(これがマクロ内にあると仮定します):
これは非効率的で、多くのコードが必要です。また、プログラマーは、var_&i
それぞれの将来の目的に対応するものを覚えておく必要があります。これを行うためのより簡単でクリーンな方法はありますか?
**これが十分な背景/例である場合は、コメントでお知らせください。必要に応じて、なぜ私が試みていることを行っているのかについて、より完全な説明を提供できることをうれしく思います。
sas - scan(&varlist) の使用に関するエラー + マクロ変数の比較
この質問のフォローアップとして、私の既存の回答が最良のようです: Extracting sub-data from a SAS dataset & apply to a different dataset
dataset を指定すると、現在、数値データを含むdsn_in
一連のマクロ変数max_1
があります。変数のリストを含むmax_N
マクロ変数もあります。varlist
2 セットのマクロは、 などにmax_1
関連付けられているように関連付けられています。各変数内のデータ値を、関連付けられた比較値とscan(&varlist, 1)
比較しようとしています。に更新データを出力したいと思います。これが私がこれまでに持っているものです:dsn_in
varlist
max_1
max_N
dsn_out
ただし、理解できない次のエラーが表示されます。options mprint;
示す。scan
SAS関数の場合、SASは配列と変数の両方として解釈しているようです。
あなたが提供できるどんな助けも大歓迎です。
sas - SASで計算を使用して既存のマクロ変数から新しいマクロ変数を作成する方法は?
既に存在する他のマクロ変数から新しいマクロ変数を作成したいと考えています。
call symput
、%eval
、およびの複数のバリエーションを試しinput
ましたが、役に立ちません...
d
3/30=.10と評価したいと思います。
本当にありがとう...
sas - SAS を最初に開いたときにマクロを定義する
ホットキーとして使用したい本当に素晴らしいマクロに出くわしました:
(ソース: https://stackoverflow.com/a/3254004/110797 )
問題は、SAS を起動するたびにマクロ宣言を再実行しなければならないことです! 上記のコードはキーバインドを永続的に設定しませんが、その部分を理解しました (キー (F9) に移動し、F12 を手動で %closevts に設定し、キー ウィンドウを閉じるときに永続的に保存します)。 マクロ定義も永続的に設定するにはどうすればよいですか?
sas プロファイルを使用して調べましたが、わかりませんでした。さらに、私のシステムはかなりロックダウンされているため、一部が機能しない場合に備えて、複数のソリューションが高く評価されています。
database - SAS の 2 つの ID 属性の中で最高レベルの変数を見つけるには
私の入力データセットは次のようになります。
親をもう持たない DRUGS (およびこの DRUGS のすべての属性) と、最低レベルの DRUG_CD を含む追加の列 (CHD_DRUG_CD) のみを含むデータセットを構築する必要があります。