2017-08-09 1 views
0

私は、変数のリストを変更して特定の方法でデータセットを編成しようとしています。私が持っている問題は、データセットに実際に存在する変数の数がわからないということです。私はこれまで、変数のリストが静的だったデータステートメントの後にPROC SQLステートメントまたはRETAINステートメントを使用してこれを行いました。SAS/SQLの変数を動的に注文する

私のデータは次のようになります。

APPNUM DATE REASON1 NAME1 REASON2 NAME2 etc 
123 1/1/2017 X  Jon Y  Mary etc 

これは、SQLを使用した簡単だろうか、文を保持:

APPNUM DATE REASON1 REASON2 REASON3 REASON4 NAME1 NAME2 NAME3 NAME4 
123 1/1/2017 X  Y  Z  A  Jon Mary Tom Suzie 

が、私はそれが次のようになりたいです。しかし、私はこれらの変数を一緒に引き出すためにループなどを使用しています。提示される変数の数は入力データに依存します。いくつかの日には20件の理由/名前があり、他にはそれぞれ1件あるかもしれません。

変数名のリストをプルするために、次のコードを試してから、APPNUM、DATEを注文し、最後に変数名の最後の桁で注文しました。 I. 1,1,2,2,3,3 - しかし、私は失敗しました。リストは正しく格納されていました。エラーはありませんが、& VARLISTの値が解決されました。彼らは期待どおりに注文されていません。誰もこれを試してこれを達成しましたか?

APPNUM, DATE, NAME1...2...3..., REASON1...2...3... 

ない:

APPNUM, DATE, NAME1, REASON1, NAME2, REASON2.... 

答えて

1

2つの問題

PROC SQL; 
SELECT NAME INTO :VARLIST SEPARATED BY ',' 
FROM DICTIONARY.COLUMNS 
WHERE LIBNAME = 'WORK' 
AND MEMNAME = 'SFINAL' 
ORDER BY NAME, SUBSTR(NAME,LENGTH(NAME)-1); 
QUIT; 

上記のコードは次のようなものを注文します。

まず、ORDER BYの注文は、後ろになります。

第2に、SUBSTR()コールが正しくありません。あなたは最後に任意の長さ番号を持っています。あなたはどのくらいの文字があるのか​​分かりません。その数字の文字列を読んだり、数値に変換したり、それを注文したりするのが最も良い方法です。

data test; 
array name[20]; 
array reason[20]; 
format appnum best. date date9.; 
run; 

proc sql noprint; 
SELECT NAME INTO :VARLIST SEPARATED BY ',' 
FROM DICTIONARY.COLUMNS 
WHERE LIBNAME = 'WORK' 
AND MEMNAME = 'TEST' 
and (upcase(NAME) like 'NAME%' or upcase(NAME) like 'REASON%') 
ORDER BY input(compress(compress(name,'name'),'reason'),best.), NAME ; 
quit; 

%put &varlist; 

proc sql noprint; 
create table test2 as 
select APPNUM, DATE, &varlist 
from test; 
quit; 
+0

ORDER BYはなぜ後方ですか?また、私のSUBSTRは間違っていません..単に長さ-Nを実行すれば、SASはその点から残りの文字列にsubstrを置きます。 I. 'データテスト; 長さa $ 3; 入力a; データライン; abc ; 実行; proc sql; 新しいテーブルを作成する select substr(a、length(a)-0)をa1として、 からtest; 終了します。 proc印刷データ=新規; ' は' c'を生成しますが、今私は自分自身にこれはまだ1&2桁をサポートしないと説明しています – DukeLuke

+1

番号と名前で注文したいと思います。それ以外の場合は、最初にグループ化されたすべての名前が取得されます。上記のコードを試してみてください。それはあなたが求めるものです。 – DomPazz

関連する問題