問題タブ [proc-sql]
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.
import - SASprocimportに先行ゼロがありません
proc import(SAS)を使用してcsvファイルからsasデータセットに数値をインポートしようとしていますが、インポート後に先行ゼロがすべて消えます。
例えば、
インポート後の「0123456」は「123456」のみを取得します
sql - 2つのサブセットの結合で予想されるよりも多くの結果をもたらすサブクエリ
2つのテーブルで左外部結合ステートメントを実行した後、さらに多くのIDを受け取ることができます。
コンテキスト:より大きなデータセットから2つのテーブルを絞り込みました。以下は、より大きなデータセットから選択した後に可能なIDを取得するために使用したクエリです。personIDに基づいて2つのデータセットを結合しようとしています。絞り込んだデータテーブルのデータとペアリングしながら、小さいセットのテーブルにすべてのデータを保持したいので、LEFTJOINを実行しています。
より大きなデータセットのサブセットでこのクエリを実行すると、次のIDを受け取ります。
ここで、2番目のクエリを実行すると、次のメッセージが表示されます。
次のクエリを受け取ります。
ここまでは順調ですね。すべてが期待どおりです。ただし、これら2つのサブセットを結合しようとしてこの次のサブクエリを実行すると、予期しない結果が得られます。
この結果には、以前のクエリに含まれていないデータが含まれています。具体的には、41485
IDなどです。クエリを個別のクエリに分割すると、必要なIDが取得されるため、これらのIDが表示される理由がわかりません。41489
41496
indexing - SASが私のインデックスを使用しなかったのはなぜですか?
フィールド「A」でソートされた大きなSASデータセットがあります。フィールド「A」と「B」を参照するクエリを実行したいと思います。パフォーマンスを高速化するために、「B」にインデックスを作成しました。これにより、役に立たないメッセージが表示されます。
もちろん、Bでソートすると役立ちます。しかし、それは重要ではありません。インデックスは、他のフィールドですでに並べ替えられている場合に使用します。
同様のクエリで、SASは次のメッセージを表示します。
SASにインデックスを使用させるためのヒントはありますか?あるケースでは、SASがインデックスを使用しないため、クエリの実行に2時間かかります。
sas - PROCSQLでの結果の制限
PROC SQLを使用して、何億ものレコードを含むDB2テーブルをクエリしようとしています。開発段階では、これらのレコードの任意の小さなサブセット(たとえば、1000)に対してクエリを実行したいと思います。INOBSを使用して観測を制限しようとしましたが、このパラメーターは、SASが処理しているレコードの数を制限しているだけだと思います。SASがデータベースから任意の数のレコードのみをフェッチする(そしてそれらすべてを処理する)ようにしたい。
自分でSQLクエリを作成する場合は、単純に( SQL ServerSELECT * FROM x FETCH FIRST 1000 ROWS ONLY ...
と同等)を使用します。SELECT TOP 1000 * FROM x
しかし、PROCSQLにはこのようなオプションはないようです。レコードの取得には非常に長い時間がかかります。
質問:データベースから返すレコードの数を任意に制限するようにSASに指示するにはどうすればよいですか。
PROCSQLがANSISQLを使用していることを読みましたが、これには行制限キーワードの指定がありません。おそらく、SASはSQL構文をベンダー固有のキーワードに変換する努力をしたいとは思わなかったのでしょうか。回避策はありませんか?
sql - SAS:複数列の値の頻度の選択
私はこの問題を抱えていますが、SASでは。この質問で提供されている例を使用するために、名前の5つの列(name_1、name_2など)があり、名前が頻度の降順でリストされているリストを出力したいと思います。
上記の質問に答えて、「procsql;」で囲みました。および「終了;」:
しかし、取得しています:
SAS9.2を使用しています。
考え?助けてくれてありがとう!
sas - MAX関数がprocsqlでSAS変数形式を削除するのはなぜですか?
次のことを考慮してください。
私には矛盾しているようです。この場合、proc sqlがフォーマットを保持するのはなぜですか?この動作は文書化されていますか?
sql - SAS proc sql連結と結合のような
金融システム データの SAS 構造でデータ モデルを構築しようとしています。アイデアは、テーブルに ID を文字式として保持し、別のテーブルから ID を作成することです。式で始まるものを取得するproc sql
必要があります。は次のようになります。INNER JOIN
LIKE
IDs
'ID%'
proc sql
残念ながら、次のようになるはずです: ... LIKE 'X.ID%'
Is there a way to build such expression in SAS code?
sql - SAS Proc SQLは、特定の日付に最も近い日付を持つレコードを取得します
私は以下のように2つのテーブルを持っています:
表 1、ユーザー一覧表:
表 2 に、ユーザーの昇格履歴を示します。
これら 2 つのテーブルから、テーブル 1 と同様の結果テーブルを生成する必要がありますが、タイプ A のユーザーが過去 3 か月または特定の日付で 3 か月以上昇格したことを分類する列を追加します。たとえば、結果は次のようになります。
一般的な考え方は次のとおりです。
- テーブル 1 の月の列と年の列を 2010 年 3 月のような日付形式に変換する必要があります。
- 上記の日付 (2010 年 2 月) に最も近い昇格日で新しい換算値を減算して、ユーザーが昇格した日数を取得します。
- 彼の昇進期間を分類するために90日と比較してください
私が現在立ち往生している2つの問題があります。
月の列と年の列を月/年の日付形式に変換する最良の方法がわかりません。
テーブル 1 から月/年の列を既に変換していると仮定して、Max 関数を使用してテーブル 2 から最も近い日付を取得します。私の知る限り、max 関数はパフォーマンスが良くないので、max を使用する代わりに他の解決策はありますか? mysql では Limit 1 を使えば簡単に解決できますが、SAS proc-sql は Limit に対応していません。proc-sql に limit に相当するものはありますか? 以下は現在考えているコードです。
ご覧のとおり、table1 を他のテーブルと結合したままにする必要があるため、サブクエリを使用しますが、これもパフォーマンスが低下しますが、他の方法があるかどうかはわかりません。ヘルプとアドバイスをいただければ幸いです。
sql - case/when を使用した SQLselect カウント
次の表があります。
各タイプの行数をカウントする新しいテーブルを作成したいと思います。カウントする型ごとにテーブルを作成するのは簡単ですが、見た目も性能も良くしたいので、1回のクエリで可能でしょうか?以下のようなクエリを思いついたのですが、うまくいきません。エラーには、「WHEN 句 2 の結果は、前の結果と同じデータ型ではありません」とありました。助けていただければ幸いです。事前に感謝します。
sql - SELECT のすべての非集計列によるグループ化なしの HAVING 句
すべての非集計列でグループ化せずに HAVING 句を使用するSELECT
多くの場合、ID 列と月列を他の多くのメトリックと共に含むテーブルに直面します。他の列に基づいて特定の行を除外します。12 か月分のデータをすべて含む ID のみを取得したいので、次のようにします。
私にはうまくいくようですが、この方法には危険があるのではないかと思っていました。id と id の数だけで集約されたサブクエリを結合できることはわかっていますが、この方法は非 SQL ユーザーに説明する方がはるかに簡単です。
一般に、ステートメントに集約関数を使用せHAVING
ずに列を 2 つだけ使用して句を使用できますか?GROUP BY
SELECT