Using do_shortcode with variables?

Your syntax is broken, the quote marks do not match. Try to separate data from the shortcode template, and use sprintf():

$shortcode = sprintf(
    '[pw_map address="%1$s %2$s %3$s %4$s" width="%5$s" height="200px"]',
    $address,
    $city,
    $province,
    $postalcode,
    '100%'
);
echo do_shortcode( $shortcode );

That’s much easier to read, and it is harder to create syntax errors. 🙂