【SAS】DO LOOPを用いた繰り返し処理方法

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • SASプログラミングを用いて繰り返し処理を実施する方法が知りたい!
目次

【SAS】DO LOOPを用いた繰り返し処理基礎

Do Loopはプログラム内で同じブロックのコードを複数回実行するためのステートメントです。

はじめに、簡単な繰り返し処理について見ていきましょう。以下のコードを実行します。

コード

/* 繰り返し構文 */
DATA LoopA;
	/* 繰り返し処理 */
	DO i = 1 TO 5;

		/* 繰り返し構文で実行される処理 */
		T1 = i * 2;
		T2 = i * 4;

	OUTPUT;
	END;
RUN;

/* 出力 */
PROC PRINT DATA=LoopA;
RUN;
  • DO:繰り返し処理の定義するステートメント
  • OUTPUT:データセットに行を追加するための出力ステートメント。OUTPUTを記載することで、各ループで生成されたデータがデータセットに追加される。
  • END:繰り返し処理の終了を宣言。

出力イメージ

Obs	i	T1	 T2
1	1	 2	  4
2	2	 4	  8
3	3	 6	 12
4	4	 8	 16
5	5	10	 20

【SAS実践】様々な繰り返し処理事例

後述では、DO LOOP構文に慣れるために、様々な繰り返し処理について紹介します。

条件分岐(IF文)を用いた繰り返し処理

繰り返し処理に条件分岐を適用したい場合、次のように記述できます。

コード

/* 
================================================
サンプルデータセット
================================================
*/

DATA LOOPB;
	INPUT NUMBER;
	DATALINES;
	1
	2
	3
	4
	5
;
RUN;


/* 
================================================
繰り返し処理
================================================
*/

DATA LoopB;
	/* サンプルデータセットを指定 */
	SET LoopB;
	
	/* 対象項目が偶数の場合の繰り返し処理 */
	IF mod(NUMBER, 2) = 0 THEN
		DO;
			Even = "T";
			Odd  = "F";
		END;
		
	/* 対象項目が奇数の場合の繰り返し処理 */
	ELSE DO;
	    	Even = "F";
			Odd  = "T";
		END;
RUN;


/* 出力 */
PROC PRINT DATA=LoopB;
RUN;

出力イメージ

Obs	NUMBER	Even	Odd
1	    1	  F	      T
2	    2	  T	      F
3	    3     F	      T
4	    4	  T	      F
5	    5	  F	      T

Array(配列)を用いた繰り返し処理

Arrayを用いて繰り返し処理を実現する場合、次のように記述できます。

コード

/* 
================================================
サンプルデータセット
================================================
*/

DATA LoopC;
    INPUT NUMBER;
    DATALINES;
    1
    2
    3
    4
    5
;
RUN;


/* 
================================================
繰り返し処理
================================================
*/

DATA LoopC;
    /* サンプルデータセットを指定 */
    SET LoopC;

    /* arrayを1つ作成しDO LOOPを記述 */
    ARRAY number_array[1];
    
	/* 繰り返し処理をArrayの長さ分実行 */
    DO i = 1 TO DIM(number_array);
        x2 = Number * 2;
        x3 = Number * 3;
        x4 = Number * 4;
    OUTPUT;
    END;
	
	/* 不要な項目除外 */
    DROP i;
RUN;


/* 出力 */
PROC PRINT DATA=LoopC;
RUN;
  • DIM(ARRAY)を用いると、配列の長さを取得可能

出力イメージ

bs	NUMBER	number_array1	x2	  x3	 x4
1	     1	            .	 2	   3	  4
2	     2	            .	 4	   6	  8
3	     3	            .	 6	   9	 12
4	     4	            .	 8	  12	 16
5	     5	            .	10	  15	 20

【参考】SASプログラミング記事一覧

当サイトではSASを用いたプログラミング解説記事を多数掲載しております。

SASはデータ処理・分析をはじめ、高度な統計解析や機械学習・AIによる予測モデリングなど様々な用途に利用できます。また金融や医療を代表とする様々な業界の分析業務で広く活用されています。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次