The MCMC Procedure

PARMS Statement

PARMS name |(name-list)<=> <{> number |number-list <}> <name |(name-list)<=> <{> number |number-list <}> …> </ options> ;

The PARMS statement lists the names of the parameters in the model and specifies optional initial values for these parameters. These parameters are referred to as the model parameters. You can specify multiple PARMS statements. Each PARMS statement defines a block of parameters, and the blocked Metropolis algorithm updates the parameters in each block simultaneously. See the section Blocking of Parameters for more details. PROC MCMC generates missing initial values from the prior distributions whenever needed, as long as they are the standard distributions and not the GENERAL or DGENERAL function.

If your model contains a multidimensional parameter (for example, a parameter with a multivariate normal prior distribution), you must declare the parameter as an array (using the ARRAY statement). You can use braces $\{ ~ \} $ after the parameter name in the PARM statement to assign initial values. For example:

array mu[3];
parms mu {1 2 3};

You cannot use the ARRAY statement to assign initial values. If you use the ARRAY statement to store values in array elements, the declared array becomes a constant array and cannot be used as parameters in the PARMS statement. For example, the following statement assigns three numbers to mu:

array mu[3] (1 2 3);

The array mu can no longer be a model parameter.

Every parameter in the PARMS statement must have a corresponding prior distribution in the PRIOR statement. The program exits if this one-to-one requirement is not satisfied.

You can specify the following options to control different samplers explicitly for that block of parameters.


uses the normal proposal distribution in the random walk Metropolis. This is the default.

T <(df )>

uses the t distribution with df degrees of freedom as an alternative proposal distribution. A t distribution with a small number of degrees of freedom has thicker tails and can sometimes improve the mixing of the Markov chain. When df $>100$, the normal distribution is used instead.


applies the slice sampler to each parameter in the PARMS statement individually. See the sectionSlice Sampler for details. PROC MCMC does not implement a multidimensional version of the slice sampler. Because the slice sampler usually requires multiple evaluations of the objective function (the posterior distribution) in each iteration, the associated computational cost could be potentially high with this sampling algorithm.


implements a user-defined sampler for any of the parameters in the block. See the section UDS Statement for details and Implement a New Sampling Algorithm for a realistic example. When you specify the UDS option, PROC MCMC hands off the sampling of these parameters to you at each iteration and relies on your sampler to return a random draw from the conditional posterior distribution. This option is useful if you have a model-specific sampler that you want to implement or a new algorithm that can improve the convergence and mixing of the Markov chain. This functionality is for advanced users, and you should proceed with caution.