This is a pretty straightforward request using STRING_AGG
(requires SQL Server 2017 (14.x)+).
Run the below in SSMS.
DECLARE @data table ( Program varchar(20), Subprogram varchar(20), Region varchar(20) );
INSERT INTO @data VALUES
( 'program 1', 'subprogram 1', 'Region 1' ),
( 'program 1', 'subprogram 1', 'Region 2' ),
( 'program 1', 'subprogram 1', 'Region 3' ),
( 'program 1', 'subprogram 1', 'Region 4' ),
( 'program 2', 'subprogram 2', 'Region 5' );
SELECT
Program, Subprogram, STRING_AGG ( Region, ',' ) AS Region
FROM @data
GROUP BY
Program, Subprogram
ORDER BY
Program, Subprogram, Region;
Returns
+-----------+--------------+-------------------------------------+
| Program | Subprogram | Region |
+-----------+--------------+-------------------------------------+
| program 1 | subprogram 1 | Region 1,Region 2,Region 3,Region 4 |
| program 2 | subprogram 2 | Region 5 |
+-----------+--------------+-------------------------------------+