## Download and install packages in one step

- Get working faster with quicker access to pre-built GAUSS packages.
- Download, install and update GAUSS packages without ever leaving GAUSS.
- Supports paid GAUSS Application Modules and
*new free GAUSS packages*! - Download from Aptech channels or create and share private packages across your organization.

Questions? Get an answer from our experts or request a quote!

## Improved panel data functionality

New function to aggregate results across groups by:

*mean*,*min*,*max*,*median*,*mode*,*variance*,*sum*and*standard deviation*.

### Example aggregate by year

```
// Load data with the grouping data in the first column
X = loadd("grunfeld.dat", "Years + Investment");
// Group investment by average for year
mean_by_year = aggregate(X, "mean");
```

### Example aggregate by firm

```
// Load data with the grouping data in the first column
X = loadd("grunfeld.dat", "firm + Investment");
// Group investment by median for each firm
median_by_firm = aggregate(X, "median");
```

## Advanced imputation methods for missing values

- New support for
*predictive mean matching*,*local residual draws*, and*linear prediction*imputation. - Customizable with options for the
*number of donors*,*matching type*, and*linear prediction methods*.

## Optional Arguments: Add power and flexibility to your procedures

New suite of tools makes it easy to add optional arguments to your GAUSS procedures.

- Easily integrate default values.
- Retrieve single or multiple optional inputs in a single line.
- Tools to count the number of optional inputs and check input types.

### Example estimation procedure with optional lambda

This example shows a simple estimation procedure that chooses either OLS estimation or ridge regression based on whether an optional input, lambda, is passed in.

```
// ... is a placeholder for the optional arguments
proc (1) = estimate(y, X, ...);
local lambda;
// Get the optional 'dynamic argument'
lambda = getDynargs(1);
// If the 'lambda' was not passed in,
// it will be an empty matrix.
if isempty(lambda);
// No 'lambda' so perform standard OLS
b_hat = olsRegress(y, X);
else;
// 'lambda' passed in so perform ridge regression
b_hat = ridgeRegress(y, X, lambda);
endif;
retp(b_hat);
endp;
```

The procedure above can be called like this:

```
// OLS regression when optional input is not passed in
b_hat = estimate(y, X);
```

or like this:

```
// Ridge regression is performed when optional input is passed in
b_hat = estimate(y, X, lambda);
```

## Expanded graphics tools

### New filled area plots using `plotXYFill`

.

### New horizontal bar plots using `plotBarH`

.

### Other new graphics functionality

`plotSetLegend`

now supports setting the legend location by coordinates.- Precise control over y-axis tick location and intervals using
`plotSetYTicInterval`

. - Alpha channel support provides optional transparency for any graph element.
- Better control over bar plot adds.
- Control for legend border properties.

## Other new functions

**modec**- Compute mode for each matrix column.**loaddsa**- Load string data from CSV, Excel, GAUSS, SAS or STATA datasets.**sprintf**- Create formatted string output from columns of matrices and strings.`var_names = "alpha" $| "beta" $| "gamma"; b = { 0.34, 1.9334, -0.8983 }; se = { 0.00002234, 0.013235, 0.03752 };`

↓

`print sprintf(fmt, var_names, b, se);`

↓

alpha 0.340 (0.00) beta 1.933 (0.01) gamma -0.898 (0.04)

**weighted ols**- Compute weighted OLS estimates with user-specified weights.

### Next steps

### Was this post helpful?

Let us know if you liked the post. That’s the only way we can improve.